Submission #1155430

#TimeUsernameProblemLanguageResultExecution timeMemory
1155430CiprianKpart (eJOI21_kpart)C++20
10 / 100
2096 ms476 KiB
#include <bits/stdc++.h> using namespace std; #define int long long vector<bool>dp(50002); void deep(int sum, vector<int>&v, int l, int r, vector<vector<bool>>& dp1){ if(sum%2!=1){ vector<int>a; for(int i=l; i<=r; i++)a.push_back(v[i]); int n=a.size(); dp.assign(sum/2 +3, false); dp[0]=true; for(int i=0; i<n; i++){ if(dp[sum/2])break; for(int j=sum/2; j>=0; j--){ if(j-a[i]>=0 && dp[j-a[i]])dp[j]=true; } }dp1[l][r]=dp[sum/2]; } } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); int t; cin>>t; for(int _=0; _<t; _++){ int n; cin>>n; vector<int>a(n+2), sum(n+2); vector<vector<bool>>dp1(n+1, vector<bool>(n+1)); for(int j=1; j<=n; j++){ cin>>a[j]; sum[j]=sum[j-1]+a[j]; }for(int i=1; i<=n; i++){ for(int j=i; j<=n; j++){ deep(sum[j]-sum[j-i], a, j-i+1, j, dp1); } } vector<bool>check(n+1); for(int i=2; i<=n; i++){ if(!check[i]){ bool c=true; for(int j=i; j<=n; j++){ if( !dp1[j-i+1][j]){ c=false; break; } }if(c){ for(int j=i; j<=n; j+=i){ check[j]=true; } } } } vector<int>q; for(int i=2; i<=n; i++){ if(check[i])q.push_back(i); }cout<<q.size()<<" "; for(auto e: q)cout<<e<<" "; cout<<endl; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...