[高斯消元 线性基 贪心 拟阵] BZOJ 2460 [BeiJing2011]元素

来源:互联网 发布:word for mac 破解版 编辑:程序博客网 时间:2024/06/03 12:30

基本同BZOJ3105


#include<cstdio>#include<cstdlib>#include<algorithm>#include<functional>using namespace std;typedef long long ll;typedef pair<int,ll> abcd;inline char nc(){    static char buf[100000],*p1=buf,*p2=buf;    if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p2) return EOF; }    return *p1++;}inline void read(int &x){    char c=nc(),b=1;    for (;!(c>='0' && c<='9');c=nc()) if (c=='-') b=-1;    for (x=0;c>='0' && c<='9';x=x*10+c-'0',c=nc()); x*=b;}inline void read(ll &x){    char c=nc(),b=1;    for (;!(c>='0' && c<='9');c=nc()) if (c=='-') b=-1;    for (x=0;c>='0' && c<='9';x=x*10+c-'0',c=nc()); x*=b;}const int N=1005,K=63;int n;abcd a[N];int base[K+5];ll ans;int main(){    freopen("t.in","r",stdin);    freopen("t.out","w",stdout);    read(n);    for (int i=1;i<=n;i++) read(a[i].second),read(a[i].first);    sort(a+1,a+n+1,greater<abcd>());    for (int i=1;i<=n;i++)    {        for (int p=K;~p;p--)            if (a[i].second>>p&1)            {                if (!base[p]){                    base[p]=i; break;                }                else                    a[i].second^=a[base[p]].second;            }        if (a[i].second) ans+=a[i].first;    }    printf("%lld\n",ans);    return 0;}


0 0
原创粉丝点击