本题赛后加的数据有锅,本人的ac代码在 N=106 时能过,而 N=2.5×106 时最后一个点会wa。
附上本人代码
#include<iostream>
#include<bitset>
using namespace std;
#define N 1000010
int t,n,a[N],f[2][N];
bitset<N> s,b,c;
int main()
{
cin>>t;
while(t--)
{
cin>>n;
int sum=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
sum+=a[i];
}
a[n+1]=0;
if(sum%n==0)
{
int p=sum/n;
s.reset();
b.reset();
b.set(0);
s.set(0);
for(int i=1;i<=n;i++)
{
a[i]-=p;
if(a[i]==0)
{
puts("Yes");
goto loop;
}
if(a[i]>0)
{
b|=b<<a[i];
}
else
{
s|=s<<(-a[i]);
}
}
c=s&b;
// for(int i=0;i<=n;i++)
// cout<<s[i]<<" ";
// cout<<"}"<<endl;
// for(int i=0;i<=n;i++)
// cout<<b[i]<<" ";
// cout<<"}"<<endl;
if(c.count()>2)
puts("Yes");
else
puts("No");
}
else
puts("No");
loop:
;
}
}