https://www.papamelon.com/problem/157
通过观察你会发现和为奇数一定无解,和为偶数一定有解。
我们先从大到小的取一个集合,剩下的为一个集合。
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
int n; cin>>n;
long long int sum=0;
for(int i=1;i<=n;i++) sum+=i;
vector<int>st(n+1,0);
if(sum&1) puts("NO");
else
{
puts("YES");
vector<int>ans;
long long int temp=sum/2;
for(int i=n;i>=1;i--)
{
if(temp>=i) ans.push_back(i),st[i]=1,temp-=i;//可以取
if(temp==0) break;
}
cout<<ans.size()<<endl;
for(int i=0;i<ans.size();i++) cout<<ans[i]<<" ";
cout<<endl;
cout<<n-ans.size()<<endl;
for(int i=1;i<=n;i++) if(!st[i]) cout<<i<<" ";
}
return 0;
}