Submission #1328774

#TimeUsernameProblemLanguageResultExecution timeMemory
1328774boclobanchatBootfall (IZhO17_bootfall)C++20
100 / 100
333 ms5680 KiB
#include<bits/stdc++.h>
using namespace std;
const int MAXN=252525;
const long long mod=2702200927022011;
long long dp[MAXN],fdp[MAXN],A[MAXN];
bool ck[MAXN];
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n;
    cin>>n;
    dp[0]=1;
    int sum=0;
    bool cc=true;
    for(int i=1;i<=n;i++)
    {
    	cin>>A[i];
    	sum+=A[i],cc&=(A[i]%2==A[1]%2);
    	for(int j=sum;j>=A[i];j--) dp[j]=(dp[j]+dp[j-A[i]])%mod;
	}
	for(int i=A[1]%2;i<=sum;i+=2) ck[i]=true;
	if((sum&1)||!dp[sum/2]||!cc) return cout<<0,0;
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<=sum;j++) fdp[j]=dp[j];
		for(int j=A[i];j<=sum;j++) fdp[j]=(fdp[j]-fdp[j-A[i]]+mod)%mod;
		for(int j=A[1]%2;j<=sum;j+=2) ck[j]&=(fdp[(sum-A[i]+j)/2]>0);
	}
	vector<int> ans;
	for(int i=0;i<=sum;i++) if(ck[i]) ans.push_back(i);
	cout<<ans.size()<<"\n";
	for(auto v:ans) cout<<v<<" ";
}
#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...