2460: [BeiJing2011]元素|线性基|高斯消元|贪心

来源:互联网 发布:php微信开发源码 编辑:程序博客网 时间:2024/05/10 17:17

贪心从大到小加入,正确性不是很会证(根本不会证),需要用到拟阵来证明
总之做法就是从大到小贪心加入,如果不与已选的元素冲突,那么就贪心选他

#include<iostream>#include<algorithm>#include<cstdlib>#include<cstdio>#include<cstring>#include<vector>#include<cmath>#include<complex>#include<queue>#include<map>#include<set>#define ll long long#define N 1005using namespace std;ll sc(){    ll i=0; char c=getchar();    while( c>'9' || c<'0' ) c=getchar();    while( c>='0' && c<='9' )i=i*10+c-'0',c=getchar();    return i;}struct W{int x;ll a;}a[N];ll ins[66],ans;int n;bool cmp(W a,W b){    return a.x>b.x;}int main(){    n=sc();    for(int i=1;i<=n;i++)        a[i].a=sc(),a[i].x=sc();    sort(a+1,a+n+1,cmp);    for(int i=1;i<=n;i++)    {        for(int k=65;k>=0;k--)        {            if((a[i].a>>k)&1)            {                if(!ins[k])                {                    ins[k]=a[i].a;                    break;                }                a[i].a^=ins[k];            }        }        if(a[i].a)ans+=a[i].x;    }    cout<<ans;    return 0;}
0 0
原创粉丝点击