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

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

img


#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