• 洛谷 P4570 [BJWC2011]元素(贪心、线性基)


    传送门


    解题思路

    贪心策略:按照价值从大到小排序,能选就选。

    用线性基维护是否发生冲突。

    正确性:异或和为0的几个数中去掉价值最低的异或和一定不为0。

    AC代码

    #include<iostream>
    #include<algorithm>
    #include<cmath>
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<queue>
    #include<set>
    #include<map>
    #include<vector>
    #include<iomanip>
    #include<ctime>
    #include<stack>
    using namespace std;
    const int maxn=1005;
    int n,ans;
    long long a[maxn];
    struct node{
    	long long a;
    	int b;
    	bool operator <(const node x)const{
    		return b>x.b;
    	}
    }x[maxn];
    void add(long long x){
    	for(int i=63;i>=0;i--){
    		if(x&(1ll<<i)){
    			if(a[i]) x^=a[i];
    			else{
    				a[i]=x;
    				return;
    			}
    		}
    	}
    }
    bool check(long long x){
    	for(int i=63;i>=0;i--){
    		if(x&(1ll<<i)){
    			if(a[i]) x^=a[i];
    			else{
    				return true;
    			}
    		}
    	}
    	return false;
    }
    int main(){
        ios::sync_with_stdio(false);
        cin>>n;
        for(int i=1;i<=n;i++) cin>>x[i].a>>x[i].b;
        sort(x+1,x+n+1);
        for(int i=1;i<=n;i++){
        	if(check(x[i].a)) add(x[i].a),ans+=x[i].b;
    	}
    	cout<<ans;
        return 0;
    }
    
  • 相关阅读:
    Markdown文档示例
    Python网络编程(一)
    JS之客户端检测
    MySQL 多表查询
    MySQL 单表查询
    MySQL 入门
    Python内置方法大全
    010 盒模型
    009 CSS选择器
    008 常用样式
  • 原文地址:https://www.cnblogs.com/yinyuqin/p/15473211.html
Copyright © 2020-2023  润新知