Submission #1151266

#TimeUsernameProblemLanguageResultExecution timeMemory
1151266andrei_nKpart (eJOI21_kpart)C++20
10 / 100
2097 ms68128 KiB
#include <bits/stdc++.h>

using namespace std;

//bool dp[1005][50005];
unordered_set<int> dp[1005];
int v[1005];
int fr[1005];

signed main()
{
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    int T; cin>>T; while(T--)
    {
        int n; cin>>n;
        for(int i=1; i<=n; ++i)
        {
            cin>>v[i];
            fr[i] = 0;
        }
        for(int i=1; i<=n; ++i)
        {
            int LIMIT = 50005;//min(50000, 200000/(n-i+1));
            for(int j=0; j<=n-i+1; ++j)
//                for(int k=0; k<=LIMIT; ++k)
//                    dp[j][k] = 0;
                dp[j].clear();
//            dp[0][0] = 1;
            dp[0].insert(0);
            for(int j=i; j<=n; ++j)
            {
                for(auto &k : dp[j-i])
                {
                    if(k + v[j] <= LIMIT)
                        dp[j-i+1].insert(k + v[j]);
                    dp[j-i+1].insert(abs(k - v[j]));
                }
                if(dp[j-i+1].find(0) != dp[j-i+1].end())
                    ++fr[j-i+1];
            }
        }
        vector<int> ok;
        for(int i=1; i<=n; ++i)
            if(fr[i] == n - i + 1)
                ok.push_back(i);
        cout<<ok.size();
        for(auto &i : ok) cout<<' '<<i;
        cout<<'\n';
    }
    return 0;
}

/*
2
7
7 3 5 1 3 3 5
6
1 2 3 5 8 3
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...