#include <bits/stdc++.h>
using namespace std;
#define double long double
#define endl "\n"
#define pb push_back
#define ff first
#define ss second
#define mod 998244353
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
void solve(){
int n;
cin >> n;
vector<int> v(n+1,0);
for(int i=1;i<=n;i++){
cin >> v[i];
}
vector<vector<int>> dp(n+1,vector<int> (1e5 + 5,0));
for(int i=1;i<=n;i++){
for(int j=1e5;j>=1;j--){
dp[i][j] = dp[i-1][j];
if(j + v[i] <= 1e5){
dp[i][j+v[i]] = max(dp[i][j+v[i]],dp[i][j]);
}
}
dp[i][v[i]] = max(dp[i-1][v[i]],i);
}
vector<int> ans;
for(int i=1;i<=n;i++){
int sum = 0,ok = 1;
for(int j=1;j<i;j++){
sum += v[j];
}
for(int j=i;j<=n;j++){
sum -= v[j-i],sum += v[j];
if(sum % 2 || dp[j][sum / 2] <= j-i){
ok = 0;break;
}
}
if(ok) ans.pb(i);
}
cout << ans.size() << ' ';
for(int x : ans){
cout << x << ' ';
}
cout << endl;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
int t = 1;
cin >> t;
while(t--)
solve();
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
200 ms |
12820 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
606 ms |
27272 KB |
Output is correct |
2 |
Correct |
1161 ms |
47092 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
2065 ms |
101560 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |