RT
#include <bits/stdc++.h>
using namespace std;
const int maxl=505;
int n,len=0;
int a[maxl],ans[maxl],tmp[maxl];
bool cmp(int x,int y)
{
return x>y;
}
bool check(int x)
{
int pos=0,jj=1,sumv=0;
for (int i=1;i<=n;i++)
{
if (i!=x) tmp[++pos]=a[i],sumv+=tmp[pos];
}
if (sumv&1) return false;
for (int i=1;i<=pos;i++)
{
sort(tmp+i+1,tmp+pos+1,cmp);
for (int j=i+1;j<=pos;j++)
{
if (!sumv) break;
if (!tmp[i]) break;
if (tmp[j]) tmp[i]--,tmp[j]--,sumv--;
else break;
}
if (!sumv) break;
}
for (int i=1;i<=n;i++)
{
if (tmp[i]) return false;
}
return true;
}
signed main()
{
cin>>n;
n++;
for (int i=1;i<=n;i++) cin>>a[i];
for (int i=1;i<=n;i++)
{
if (check(i)) ans[++len]=i;
}
cout<<len<<endl;
for (int i=1;i<=len;i++) cout<<ans[i]<<endl;
return 0;
}
这个代码的复杂度是O(n3logn)的,但是加了O2就过了!
建议加强数据。