제출 #1129187

#제출 시각아이디문제언어결과실행 시간메모리
1129187ImperialALENKpart (eJOI21_kpart)C++20
100 / 100
1028 ms2084 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);
#define double long double


using namespace std;
 
const ll N = 3e5+7, INF = 1e14, inf = 1e9 , mod = 1e9+7;

int a[N];

bool good[N];

int dp[N];

int pref[N];

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];
		}
		for(int i=1;i<=n;i++){
			for(int x=pref[n];x>=1;x--){
				dp[x+a[i]]=max(dp[x+a[i]],dp[x]);
			}
			dp[a[i]]=i;
			for(int k=2;k<=i;k++){
				int sum=(pref[i]-pref[i-k]);
				if(sum%2==1 || dp[sum/2]<i-k+1)good[k]=1;
			}
		}
		vector<int>ans;
		for(int i=2;i<=n;i++){
			if(good[i]==0)ans.pb(i);
			good[i]=0;
		}
		cout<<ans.size()<<" ";
		for(auto to:ans)cout<<to<<" ";
		cout<<'\n';
		for(int i=1;i<=2e5;i++)dp[i]=0;
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...