제출 #1155373

#제출 시각아이디문제언어결과실행 시간메모리
1155373CiprianKpart (eJOI21_kpart)C++20
0 / 100
2093 ms792 KiB

#include <bits/stdc++.h>
using namespace std;
#define int long long 
int deep(int sum, vector<int>&v, int l, int r){
    if(sum%2==1)return 0;
    vector<int>a;
    for(int i=l; i<=r; i++)a.push_back(v[i]);
    int n=a.size();
    
    vector<vector<bool>>dp(n+2, vector<bool>(sum/2+3));
    dp[0][0]=true;
    for(int i=1; i<=n; i++){
        dp[i][0]=true;
        for(int j=1; j<=sum/2; j++){
            if(j-a[i-1]>=0)dp[i][j]=(dp[i-1][j-a[i-1]]|dp[i-1][j]);
        }
    }return dp[n][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);
        for(int j=1; j<=n; j++){
            cin>>a[j];
            sum[j]=sum[j-1]+a[j];
            
        }vector<bool>check(n+1);
        for(int i=2; i<=n; i++){
            if(!check[i]){
            bool c=true;
            //cout<<check[i]<<endl;
            for(int j=i; j<=n; j++){
                //cout<<j<<" "<<sum[j]-sum[j-i]<<endl;
                if( !deep(sum[j]-sum[j-i], a, j-i+1, j)){
                    c=false;
                    break;
                }
            }if(c){
                //cout<<i<<endl;
                for(int j=i; j<=n; j+=i){
                    if(!check[j])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...