zoukankan      html  css  js  c++  java
  • bzoj2460: [BeiJing2011]元素(线性基+贪心)

    [BeiJing2011]元素

    题目传送门

    解题思路

    把矿石按照魔法值从大到小排序,然后按照顺序构造线性基,如果可以构造就把答案加上去,不能就不加,最后得出的就是真确答案。因为是从大到小构造的,所以不可能把已经构造好的减掉,损失一定更大。

    代码如下

    #include <bits/stdc++.h>
    #define INF 0x3f3f3f3f
    using namespace std;
    typedef long long ll;
    
    const int N = 100005;
    
    struct T{
        ll v, w;
        T(){}
        T(int v, int w): v(v), w(w){}
        bool operator<(const T& a)const{
            return w > a.w;
        }
    }a[N];
    ll b[N];
    
    int main()
    {
        int n;
        cin >> n;
        for(int i = 1; i <= n; i ++)
            scanf("%lld%lld", &a[i].v, &a[i].w);
        sort(a + 1, a + n + 1);
        ll ans = 0;
        for(int i = 1; i <= n; i ++){
            for(int j = 63; j >= 0; j --){
                if((a[i].v >> j) & 1){
                    if(b[j])
                        a[i].v ^= b[j];
                    else {
                        b[j] = a[i].v;
                        ans += a[i].w;
                        break;
                    }
                }
            }
        }
        cout << ans << endl;
        return 0;
    }
    
  • 相关阅读:
    001 Python网络爬虫与信息提取 课程前序
    004 JQuery (010
    Vuex的元素对象
    003 JQuery (009
    002 JQuery (004
    001 JQuery (001
    Vuex简介
    axios实例与模块封装
    axios拦截器
    015 Javascript(152
  • 原文地址:https://www.cnblogs.com/whisperlzw/p/11252933.html
Copyright © 2011-2022 走看看