# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
537606 | tqbfjotld | Kpart (eJOI21_kpart) | C++14 | 2098 ms | 644 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
int pre[1005];
int arr[1005];
bool can[1005][1005];
int main(){
int TC;
scanf("%d",&TC);
while (TC--){
int n;
scanf("%d",&n);
for (int x = 0; x<n; x++){
scanf("%d",&arr[x]);
if (x==0) pre[x] = arr[x];
else pre[x] = arr[x]+pre[x-1];
}
for (int x = 0; x<n; x++){
bitset<50005> bs;
bs[0] = true;
for (int y = x; y<n; y++){
bs = bs | (bs<<arr[y]);
int sm = pre[y]-(x==0?0:pre[x-1]);
//printf("tt %d\n",sm);
if (sm&1) can[x][y] = false;
else can[x][y] = bs[sm/2];
//printf("can %d %d = %d\n",x,y,can[x][y]);
}
}
vector<int> ans;
for (int x = 1; x<=n; x++){
bool t = true;
for (int y = 0; y+x<=n; y++){
if (!can[y][y+x-1]){
t = false;
break;
}
}
if (t) ans.push_back(x);
}
printf("%d ",ans.size());
for (auto x : ans) printf("%d ",x);
printf("\n");
}
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |