#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];
}
fill(dp[1],dp[1]+MAXA,0);
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;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
25 ms |
6484 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
76 ms |
13920 KB |
Output is correct |
2 |
Correct |
155 ms |
23856 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
319 ms |
51708 KB |
Output is correct |
2 |
Correct |
512 ms |
77176 KB |
Output is correct |
3 |
Correct |
548 ms |
87116 KB |
Output is correct |
4 |
Correct |
787 ms |
113344 KB |
Output is correct |
5 |
Correct |
1170 ms |
175564 KB |
Output is correct |
6 |
Correct |
1507 ms |
197488 KB |
Output is correct |
7 |
Correct |
1511 ms |
200476 KB |
Output is correct |