bzoj 3105 线性基

来源:互联网 发布:海康威视网络摄像头 编辑:程序博客网 时间:2024/06/05 16:28

就正常的nim游戏来说,异或和为0先手必败,所以对于第一次取只要构造出没有异或和为0的子集的线性基就行了。

#include<cstdio>#include<iostream>#include<algorithm>using namespace std;const int maxn = 10005;int n,a[maxn],b[maxn],ins[maxn],cnt;long long res;inline void xor_gauss(){    cnt=0;    for(int i=n;i>=1;i--)    {        if(a[i]) res-=b[i];        for(int j=62;~j;j--)            if((a[i]>>j)&1){            for(int k=1;k<=n;k++)                if(k!=i&&a[k]&&(a[k]>>j)&1)                    a[k]^=a[i];                break;            }    }}   int main(){    scanf("%d",&n);    for(int i=1;i<=n;i++) scanf("%d",&a[i]);    sort(a+1,a+1+n);    for(int i=1;i<=n;i++)b[i]=a[i],res+=b[i];    xor_gauss();    printf("%lld\n",res);    return 0;}/*65 5 6 6 5 5*/
0 0
原创粉丝点击