Submission #1128253

#TimeUsernameProblemLanguageResultExecution timeMemory
1128253ImperialALENKpart (eJOI21_kpart)C++20
0 / 100
2094 ms680 KiB
#include <bits/stdc++.h>

#define F first
#define S second 
#define ll long long
#define int long long
#define pb push_back
#define all(x) (x.begin(),x.end())
#define	ios	ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);	
 
using namespace std;
  
const ll N = 1001+9, INF = 1e18 , inf = 1e9 , mod = 1e9+7;

int a[N];
int pref[N];

map<int,int>dp;

signed main(){
    ios;
    int tt;
    cin>>tt;
    while(tt--){
	    int n;
	    cin>>n;
	    for(int i=1;i<=n;i++){
	    	cin>>a[i];
	    	pref[i]=pref[i-1]+a[i];
		}
		if(n<=120){
			vector<int>ans;
			for(int len=1;len<=n;len++){
				bool ok=0;
				vector<int>v;
				for(int l=1;l+len-1<=n;l++){
					int r=l+len-1;
					if((pref[r]-pref[l-1])%2==1){
						ok=1;
						break;
					}
					if(l==1){
						for(int i=l;i<=r;i++)v.pb(a[i]);
					}else{
						v.erase(v.begin());
						v.pb(a[r]);
					}
//					cout<<l<<" "<<r<<endl;
					bool yes=0;
					for(auto to:v){
						for(int x=pref[r]-pref[l-1];x>=1;x--){
							if(x-to>=0){
								dp[x]=max(dp[x],dp[x-to]+to);
								if(dp[x]==(pref[r]-pref[l-1])/2){
									yes=1;
									break;
								}
							}
						}
						if(yes)break;
					}
//					cout<<yes<<endl;
					dp.clear();
					if(!yes){
						ok=1;
						break;
					}
				}
				if(ok)continue;
				else ans.pb(len);
			}
			cout<<ans.size()<<" ";
			for(auto to:ans)cout<<to<<" ";
			cout<<'\n';
		}
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...