zoukankan      html  css  js  c++  java
  • 「线性基」[BJWC2011]元素

    [BJWC2011]元素

    原题链接:BJWC2011元素

    题目大意

    给你N组数,每组数由两个数组成,分别是x, y,现在要让你求在一部分x异或之后的得到的结果不为0的情况下,y的和的最大值

    题目题解

    线性基裸题,如果不会线性基建议在线性基 了解一下,我们只要先对y排序,然后一个一个的塞进线性基里面就可以了,然后每次如果当前数可以塞的话就答案++,如果不行就看下一个

    代码如下

    //#define fre yes
    
    #include <cstdio>
    #include <algorithm>
    
    const int N = 1005;
    long long d[N];
    struct message {
        long long num;
        long long t;
    } arr[N];
    
    bool cmp(message x, message y) {
        return x.t > y.t;
    }
    
    long long ans = 0;
    inline void add(long long x, long long t) {
        for (int i = 62; i >= 0; i--) {
            if(x & (1ll << i)) {
                if(d[i]) x ^= d[i];
                else {
                    ans += t;
                    d[i] = x;
                    break;
                }
            }
        }
    }
    
    int main() {
        static int n;
        scanf("%d", &n);
        for (int i = 1; i <= n; i++) {
            scanf("%lld %lld", &arr[i].num, &arr[i].t);
        } std::sort(arr + 1, arr + 1 + n, cmp);
        for (int i = 1; i <= n; i++) {
            add(arr[i].num, arr[i].t);
        } printf("%lld
    ", ans);
        return 0;
    }
    
  • 相关阅读:
    fenby C语言 P32
    fenby C语言 P31 使用数组的指针
    fenby C语言 P30
    fenby C语言 P29
    fenby C语言 P28
    fenby C语言 P27使用指针
    fenby C语言 P25
    fenby C语言 P26
    fenby C语言P24
    Python学习之路:通过socket实现处理多个连接
  • 原文地址:https://www.cnblogs.com/Nicoppa/p/11679640.html
Copyright © 2011-2022 走看看