Roy200906 2022-08-20 15:01 采纳率: 55.6%
浏览 23

有没有人会这一题,是我在准备信息学奥林匹克竞赛中碰到的,如何解决?

有没有人会这一题,给一个代码,感觉特别难,是我在准备信息学奥林匹克竞赛中碰到的

img

  • 写回答

1条回答 默认 最新

  • harmis_yz 2022-08-20 18:42
    关注
    
    #include<bits/stdc++.h>
    
    using namespace std;
    
    int a[10000];
    
    int T;
    
    int n,s,ans,sum;
     
    int main()  
    {  
        cin>>T;
        
        while(T--)
        {
            ans=0;
            
            cin>>n>>s;
            
            for(int i=1;i<=n;i++)
            {
                cin>>a[i];
                
                if(a[i]==1)
                {
                    ans++;
                }
            }
            
            if(ans<s)
            {
                cout<<-1<<endl;
                
                continue;
            }
            
            if(ans==s)
            {
                cout<<0<<endl;
                
                continue;
            }
            
            int q=1,z=n;
            
            while(ans>s)
            {        
                if(a[q]==1)
                {
                    ans--;
                    
                    q++;
                    
                    sum++;
                }
                else
                {
                    if(a[z]==1)
                    {
                        ans--;
                        
                        z--;
                        
                        sum++;
                    }
                    else
                    {
                        int s=0;
                        
                        for(int i=q;i<=n;i++)
                        {
                            s++;
                            
                            if(a[i]==1)
                            {
                                break;
                            }
                        }
                        
                        int ss=0;
                        
                        for(int i=z;i>=1;i--)
                        {
                            ss++;
                            
                            if(a[i]==1)
                            {
                                break;
                            }
                        }
                        
                        if(ss<s)
                        {
                            z--;
                        }
                        else
                        {
                            q++;
                        }
                        
                        sum++;
                    }
                }
            }
            
            cout<<sum<<endl;
        }
          
        return 0;  
    }
    

    样例能过,但是由于不知道是哪里的题,不能完全保证能AC

    评论

报告相同问题?

问题事件

  • 创建了问题 8月20日

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?