# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1167146 | SmuggingSpun | Bootfall (IZhO17_bootfall) | C++20 | 2 ms | 328 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 sub12{
const int LIM = 605;
void solve(){
bitset<LIM>dp;
dp.reset();
dp.set(0);
for(int i = 1; i <= n; i++){
dp |= dp << a[i];
}
if((a_sum & 1) || !dp.test(a_sum >> 1)){
return void(cout << 0);
}
vector<int>ans;
for(int i = a_sum - a_max; i > 0; 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;
}
dp.reset();
dp.reset(0);
dp.set(i);
sum >>= 1;
for(int k = 1; k <= n; k++){
if(k != j){
dp |= dp << a[k];
if(dp.test(sum)){
break;
}
}
}
if(!dp.test(sum)){
ans.pop_back();
break;
}
}
}
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 <= 30 && a_max <= 20)){
sub12::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... |