Submission #689931

#TimeUsernameProblemLanguageResultExecution timeMemory
689931YENGOYANBootfall (IZhO17_bootfall)C++17
100 / 100
593 ms4532 KiB
/*
        //\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\\
        \\                                    //
        //  271828___182845__904523__53602__  \\
        \\  87___47____13______52____66__24_  //
        //  97___75____72______47____09___36  \\
        \\  999595_____74______96____69___67  //
        //  62___77____24______07____66__30_  \\
        \\  35___35____47______59____45713__  //
        //                                    \\
        \\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\//
                                                    */

#include <iostream>
#include <vector>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <cmath>
#include <climits>
#include <algorithm>
#include <random>
#include <queue>
#include <deque>
#include <iomanip>
#include <string>
#include <tuple>
#include <bitset>
#include <chrono>
#include <ctime>
#include <fstream>
#include <stack>
#include <cstdio>

using namespace std;
using ll = long long;
const int N = 3e5 + 5;
const ll mod = 1e9 + 7, inf = 1e18;

void solve() {
    int n; cin >> n;
    vector<int> v(n);
    for (int i = 0; i < n; ++i) cin >> v[i];
    vector<ll> dp(250005);
    dp[0] = 1;
    ll sm = 0;
    for (int i = 0; i < n; ++i) {
        sm += v[i];
        for (int j = 250000 - v[i]; j >= 0; --j) {
            dp[j + v[i]] += dp[j];
        }
    }
    if (sm % 2 || !dp[sm / 2]) {
        cout << "0\n";
        return;
    }
    //return;
    vector<int> cnts(250005);
    vector<int> res;
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j <= 250000; ++j) {
            if (dp[j] && j * 2 >= sm - v[i]) {
                ++cnts[2 * j - (sm - v[i])];
                if (cnts[2 * j - (sm - v[i])] == n) res.push_back(2 * j - (sm - v[i]));
            }
            if(j + v[i] <= 250000) dp[j + v[i]] -= dp[j];
        }
        for (int j = 250000 - v[i]; j >= 0; --j) dp[j + v[i]] += dp[j];
    }
    cout << res.size() << "\n";
    for (int i = 0; i < res.size(); ++i) cout << res[i] << " \n"[i + 1 == res.size()];
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(NULL);
    //int t; cin >> t;
    //while (t--)	
    solve();
}

Compilation message (stderr)

bootfall.cpp: In function 'void solve()':
bootfall.cpp:72:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   72 |     for (int i = 0; i < res.size(); ++i) cout << res[i] << " \n"[i + 1 == res.size()];
      |                     ~~^~~~~~~~~~~~
bootfall.cpp:72:72: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   72 |     for (int i = 0; i < res.size(); ++i) cout << res[i] << " \n"[i + 1 == res.size()];
      |                                                                  ~~~~~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...