[BJWC2011]元素

[BJWC2011]元素

题目大意:

\(n(n\le1000)\)个物品,每个物品有两个属性:序号\(a_i(a_i\le10^{18})\)和权值\(b_i(b_i\le10000)\)。现在从中选取若干个物品,使得序号异或和不为\(0\),求权值和最大值。

思路:

按照权值从大到小排序贪心地构造线性基。

源代码:

#include<cstdio>
#include<cctype>
#include<algorithm>
#include<functional>
typedef long long int64;
inline int64 getint() {
    register char ch;
    while(!isdigit(ch=getchar()));
    register int64 x=ch^'0';
    while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
    return x;
}
const int N=1000,B=60;
struct Node {
    int64 id;
    int w;
    bool operator > (const Node &rhs) const {
        return w>rhs.w;
    }
};
Node a[N],b[B];
int main() {
    const int n=getint();
    for(register int i=0;i<n;i++) {
        a[i].id=getint();
        a[i].w=getint();
    }
    std::sort(&a[0],&a[n],std::greater<Node>());
    for(register int i=0;i<n;i++) {
        for(register int j=B-1;j>=0;j--) {
            if((a[i].id>>j)&1) {
                if(b[j].id==0) {
                    b[j]=a[i];
                    break;
                }
                a[i].id^=b[j].id;
            }
        }
    }
    int ans=0;
    for(register int i=0;i<B;i++) {
        ans+=b[i].w;
    }
    printf("%d\n",ans);
    return 0;
}

原文地址:https://www.cnblogs.com/skylee03/p/9745663.html

时间: 2024-11-01 20:20:47

[BJWC2011]元素的相关文章

p4570 [BJWC2011]元素

题目描述-->p4570 [BJWC2011]元素 题目大意 给定一些矿石的编号与价值,我们想要得到最大的价值和,并且选定物品的编号异或之和不为0. 分析 线性基就不多bb了,来这里->p3812 [模板]线性基 贪心 我们从小到大,选择价值大的矿石,满足异或之和不为零的条件,我们就可以加上它的贡献. 因此我们需要用到sort对价值从小到大排序. 线性基. 这题线性基有什么用?说实话开始我也没想到 我们很容易想到. 如果某个矿石能被使用,那它的编号的二进制下某一位一定是已经出现过的矿石编号中不

[BJWC2011]元素 线性基

题面 题面 题解 一个方案合法,当且仅当选取的01串凑不出0. 因此就是要使得选取的01串全在线性基内,具体原因可以看这道题:[CQOI2013]新Nim游戏 线性基 要使得魔力值最大,只需要按法力值从大到小,贪心的往线性基中加串就可以了 #include<bits/stdc++.h> using namespace std; #define R register int #define AC 1100 #define LL long long int n; LL ans; LL f[AC];

线性基初探

关于线性基的学习与理解 1.线性基: 若干数的线性基是一组数\(a_1,a_2,...a_n\)其中\(a_x\)的最高位的1在第x位. 通过线性基中元素\(xor\)出的数的值域与原来的数\(xor\)出数的值域相同. 2.线性基的构造法: 对每一个数\(p\)从高位到低位扫,扫到第\(x\)位为1时,若\(a_x\)不存在,则\(a_x=p\)并结束此数的扫描,否则令\(p=pxora_x\). 3.查询: 用线性基求这组数\(xor\)出的最大值:从高往低扫\(a_x\),若异或上\(a_

【HTML5】summary交互元素

1.源码 <!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"/> <title>交互元素summary的使用</title> <style type="text/css"> body{ padding:5px; font-size:14px; } summary{ font-weight:bold; } </style>

【HTML5】用脚本控制交互元素details元素的使用

1.源码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Con

jQuery父级以及同级元素查找的实例

父级以及同级元素的查找在使用过程中还是蛮频繁的,下面为大家介绍下jQuery是如何实现的,感兴趣的朋友可以参考下 jQuery.parent(expr) 找父亲节点,可以传入expr进行过滤,比如$("span").parent()或者$("span").parent(".class") jQuery.parents(expr),类似于jQuery.parents(expr),但是是查找所有祖先元素,不限于父元素 jQuery.children(

移动端fixed的元素抖动的问题

工作中发现,给一个元素添加fixed属性,让它固定在窗口某个位置,直接加fposition:fixed属性就能实现这个效果: 在安卓手机上的效果都比较好,但是ios系统的个别浏览器兼容性就不好,如QQ浏览器.UC浏览器.360浏览器(这几个是ios最容易出问题的浏览器): 问题:当用户快速滑动页面的到时候,fixed的元素就会在窗口跳动或者抖动,非常影响用户体验 下面提供几个解决方案,仅供参考,如有更好更有效的解决办法,欢迎留言交流探讨! 方法一: 给body设置高度100% body,html

微信小程序布局之行内元素和块级元素

元素按照显示方式主要可以分为块级元素和行内元素,元素的显示方式由display属性控制. 块级元素特点总结: 1.总是在新行上开始 2.宽度的默认为width+margin-left+margin-right+padding-left+padding-right刚好等于父级元素的内容区域宽度,即父元素的width.当设定新的宽度,如果宽度是100%,并且padding.margin不为零,导致块级元素宽度溢出父元素 3.盒子模型的高度默认由内容决定 4.盒子模型中高度.宽度和内外边距都是可控制

页面滚动图片等元素动态加载插件jquery.scrollLoading.js

如果一个网页很长,那么该页面的加载时间也会相应的较长.而这里给大家介绍的这个jQuery插件scrollLoading的作用则是,对页面元素进行动态加载,通俗的说就是滚到哪就加载到哪,屏幕以下看不见的就不用加载了.这样还可以在一定程度上节省服务器资源.该插件作者的网页将该插件的功能和使用方法描述的非常详细,这里把最一般最普遍的使用情况给大家展现一下. 插件作者:http://www.zhangxinxu.com/ 首先我们需要加载jQuery库和本插件js文件. (jquery.scrollLo