# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1167142 | SmuggingSpun | Bootfall (IZhO17_bootfall) | C++20 | 1095 ms | 492 KiB |
#include<bits/stdc++.h>
#define taskname "A"
using namespace std;
const int lim = 505;
int n, a_max, a_sum = 0, a[lim];
namespace sub123{
const int LIM = 1e4 + 5;
const int mod = 1e9 + 9;
void add(int& a, int b){
if((a += b) >= mod){
a -= mod;
}
}
void sub(int& a, int b){
if((a -= b) < 0){
a += mod;
}
}
int dp[LIM];
void add_item(int x){
for(int i = a_sum; i >= x; i--){
add(dp[i], dp[i - x]);
}
}
void remove_item(int x){
for(int i = x; i <= a_sum; i++){
sub(dp[i], dp[i - x]);
}
}
void solve(){
memset(dp, 0, sizeof(dp));
for(int i = dp[0] = 1; i <= n; i++){
add_item(a[i]);
}
if((a_sum & 1) || dp[a_sum >> 1] == 0){
return void(cout << 0);
}
vector<int>ans;
for(int i = a_sum - a_max; i > 0; remove_item(i--)){
add_item(i);
ans.emplace_back(i);
for(int j = 1; j <= n; j++){
int sum = a_sum + i - a[j];
if(sum & 1){
ans.pop_back();
break;
}
remove_item(a[j]);
if(dp[sum >> 1] == 0){
add_item(a[j]);
ans.pop_back();
break;
}
add_item(a[j]);
}
}
cout << ans.size() << "\n";
for(int i = ans.size(); i > 0; ){
cout << ans[--i] << " ";
}
}
}
int main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if(fopen(taskname".inp", "r")){
freopen(taskname".inp", "r", stdin);
}
cin >> n;
for(int i = 1; i <= n; i++){
cin >> a[i];
a_sum += a[i];
}
a_max = *max_element(a + 1, a + n + 1);
if(n <= 12 || (n <= 100 && a_max <= 100)){
sub123::solve();
}
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |