제출 #988919

#제출 시각아이디문제언어결과실행 시간메모리
988919TheFuturomaKpart (eJOI21_kpart)C++17
30 / 100
2069 ms6196 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...