Submission #988919

# Submission time Handle Problem Language Result Execution time Memory
988919 2024-05-26T19:42:10 Z TheFuturoma Kpart (eJOI21_kpart) C++17
30 / 100
2000 ms 6196 KB
#include <cmath>
#include <algorithm>
#include <bitset>
#include <deque>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
#include <array>
#include <unordered_map>
#include <unordered_set>

using namespace std;
typedef long long ll;

// #pragma GCC optimize("Ofast")

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	// freopen("input.txt", "r", stdin);
	// freopen("output.txt", "w", stdout);
	

    int t;
    cin>>t;
    int largest = 500000;
    for (int test = 0; test < t; test++) {
        int n;
        cin>>n;
        unordered_set<int> kavlues;
        for (int i = 2; i <= n; i++) {
            kavlues.insert(i);
        }
        vector<int> pos(largest + 1, -1);
        vector<int> pos_swap(largest + 1, -1);
        pos[0] = 0;
        pos_swap[0] = 0;
        vector<int> a(n);
        for (int i = 0; i < n; i++) {
            cin>>a[i];
        }
        for (int i = 0; i < n; i++) {
            for (int s = largest; s >= 0; s--) {
                if (s - a[i] < 0) {
                    break;
                }
                pos[s] = max(pos[s - a[i]], pos[s]);
            }
            pos[a[i]] = i;
            int sum = 0;
            for (int j = i; j >= 0; j--) {
                sum += a[j];
                int amount = i - j + 1;
                if (amount < 2) {
                    continue;
                }
                bool erase = false;
                if (sum & 1) {
                    erase = true;
                }
                if (pos[sum >> 1] < j) {
                    erase = true;
                }
                if (erase && kavlues.find(amount) != kavlues.end()) {
                    kavlues.erase(amount);
                }
            }
        }
        vector<int> res;
        for (auto& el : kavlues) {
            res.push_back(el);
        }
        sort(res.begin(), res.end());
        cout << res.size() << " ";
        for (auto& el : res) {
            cout << el << " ";
        }
        cout << endl;
    }
}
# Verdict Execution time Memory Grader output
1 Correct 156 ms 6136 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 423 ms 6196 KB Output is correct
2 Correct 821 ms 6136 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1676 ms 6124 KB Output is correct
2 Execution timed out 2069 ms 4408 KB Time limit exceeded
3 Halted 0 ms 0 KB -