【bzoj3105】 CQOI2013新Nim游戏 拟阵贪心

来源:互联网 发布:黑洞数c语言 编辑:程序博客网 时间:2024/06/05 19:23

应晨神的要求,看了一下拟阵,感觉好扯淡,这道题感觉就是要取完之后,不能让对方有方案取到异或和为0就好了。要求取得最少,然后就要留得最多,从大开始留,如果留了之后,没有方法能把它和前面的异或成0就可以留。

然后证明要用拟阵,第二个交换性,迷迷糊糊的,对线性无关理解还不够深刻,回去看一看线性代数,有些不理解27、28行,为什么不用考虑后面的低位异或后高位不会再次出现1?


#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>#include<iostream>#include<algorithm>using namespace std;int a[110],c[40];long long tot,ans;int n;int main(){scanf("%d",&n);for (int i=1;i<=n;i++) scanf("%d",&a[i]);for (int i=1;i<=n;i++) tot+=a[i];sort(a+1,a+n+1);for (int i=n;i>=1;i--){  int t=a[i];  for (int j=30;j>=0;j--)    if ((a[i]>>j)&1)    {    if (!c[j])    {    c[j]=i;    break;    }    else a[i]^=a[c[j]];    }  if (a[i]) ans+=t;}printf("%lld\n",tot-ans);return 0;}


0 0
原创粉丝点击