Submission #1308029

#TimeUsernameProblemLanguageResultExecution timeMemory
1308029nanaseyuzukiKpart (eJOI21_kpart)C++20
100 / 100
1159 ms9192 KiB
#include <bits/stdc++.h>
// Kazusa_Megumi
#define ll long long
#define int long long
#define fi first
#define se second
#define pii pair<int, int>
#define all(a) a.begin(), a.end()
using namespace std;

const int mn = 1e3 + 5, mod = 1e9 + 7, inf = 2e9;

int m, n, x, y, a[mn];
int dp[100005], f[mn][mn], prefix[mn], tmp[mn];
 
void clear(){
    memset(f, 1, sizeof(f));
    memset(dp, 0, sizeof(dp));
    memset(prefix, 0, sizeof(prefix));
}

void solve(){
    clear();
    
    cin >> n;
    for(int i = 1; i <= n; i++){
        cin >> a[i];
        prefix[i] = prefix[i - 1] + a[i];
    }    
    for(int i = 1; i <= n; i++){
        for(int s = 1e5; s >= a[i]; s--){
            if(dp[s - a[i]] != 0) dp[s] = max(dp[s], dp[s - a[i]]);
        }
        dp[a[i]] = i;
        for(int k = 1; k <= i; k++){
            if((prefix[i] - prefix[k - 1]) % 2 != 0){
                f[i][i - k + 1] = 0;
                continue;
            }
            int qq = 0;
            if((dp[(prefix[i] - prefix[k - 1]) / 2] >= k)) qq = 1;
            if(i > k) f[i][i - k + 1] = min(f[i - 1][i - k + 1], qq);
            else if(i == k) f[i][i - k + 1] = qq;
        }
    }
    vector <int> res;
    for(int i = 1; i <= n; i++){
        if(f[n][i]) res.push_back(i);
    }
    cout << res.size() << ' ';
    for(auto i : res) cout << i << ' ';
    cout << '\n';

}

main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr); cout.tie(nullptr);
    if (fopen("Kazuki.INP", "r")) {
        freopen("Kazuki.INP", "r", stdin);
        freopen("Kazuki.OUT", "w", stdout);
    }
    int t = 1;
    cin >> t;
    while (t--) solve();
    return 0;
}

Compilation message (stderr)

Main.cpp:56:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   56 | main() {
      | ^~~~
Main.cpp: In function 'int main()':
Main.cpp:60:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   60 |         freopen("Kazuki.INP", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:61:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   61 |         freopen("Kazuki.OUT", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...