제출 #595259

#제출 시각아이디문제언어결과실행 시간메모리
595259Urvuk3Kpart (eJOI21_kpart)C++17
0 / 100
317 ms51292 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long ll INF=1e9,LINF=1e18,MOD=1e9+7; const ll MAXN=1e3+1,MAXA=1e5+1; #define fi first #define se second #define pii pair<int,int> #define mid ((l+r)/2) #define sz(a) (int((a).size())) #define all(a) a.begin(),a.end() #define endl "\n" #define PRINT(x) cerr<<#x<<'-'<<x<<endl<<flush; #define pb push_back #define PRINTvec(x) { cerr<<#x<<"-"; for(int i=0;i<sz(x);i++) cerr<<x[i]<<" "; cerr<<endl; } int a[MAXN],dp[MAXN][MAXA],pref[MAXN]; void Solve(){ int N; cin>>N; for(int i=1;i<=N;i++){ cin>>a[i]; pref[i]=a[i]+pref[i-1]; } dp[1][a[1]]=1; for(int i=2;i<=N;i++){ for(int A=0;A<MAXA/2;A++){ //PRINT(i); PRINT(A); dp[i][A]=dp[i-1][A]; if(A>a[i]) dp[i][A]=max(dp[i][A],dp[i-1][A-a[i]]); else if(A==a[i]) dp[i][A]=i; } } vector<int> ans; for(int K=2;K<=N;K++){ bool ok=true; for(int l=1;l+K-1<=N;l++){ int r=l+K-1; int sum=pref[r]-pref[l-1]; ok&=(sum%2==0 && dp[r][sum/2]>=l); } if(ok) ans.pb(K); } cout<<sz(ans)<<" "; for(auto x:ans){ cout<<x<<" "; } cout<<endl; } int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int t; cin>>t; //t=1; while(t--){ Solve(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...