自己不会做,看了题解懂得

从最高位依次往低位遍历,因为偶数个1是不改变符号的,所以带个贪心即可(可以看成是带撤销的。。)

每轮循环用sum记录该位选择1可以减少的值

如果是负数,就不要改成1

如果是正,就改成1,然后增加一次改成1的影响

怎么增加影响:如果一个数的i位改成1,等价于其在最终减少的值 *-1,

比如说原来是a[i],现在和&s 是 一个1,那么就直接变成-a[i]

然后又多了一个1, 那么又变成了 a[i], 即等价于每次影响乘以了 -1

#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int maxn = ;
LL a[maxn], b[maxn];
int main() {
int n;
LL sum = ;
scanf("%d", &n);
for (int i = ; i <= n; i++) {
scanf("%lld%lld", &a[i], &b[i]);
sum += a[i];
}
if(sum < ) {
for (int i = ; i <= n; i++)
a[i] = -a[i];
}
LL ans = ;
for (int j = ; j >= ; j--) {
LL s = ;
for (int i = ; i <= n; i++) {
if(b[i] == (1ll << j)) s += a[i];
}
if(s > ) ans |= (1ll << j);
for (int i = ; i <= n; i++) {
if((b[i] >> j) & ) {
b[i] ^= (1ll << j);
if(s > ) a[i] = -a[i];
}
}
}
printf("%lld\n", ans);
}

带撤销贪心——cf1148F好题的更多相关文章

  1. 带撤销并查集 & 可持久化并查集

    带撤销并查集支持从某个元素从原来的集合中撤出来,然后加入到一个另外一个集合中,或者删除该元素 用一个映射来表示元素和并查集中序号的关系,代码中用\(to[x]\) 表示x号元素在并查集中的 id 删除 ...

  2. 种花 [JZOJ4726] [可撤销贪心]

    Description 经过三十多个小时的长途跋涉,小Z和小D终于到了NOI现场——南山南中学.一进校园,小D就被花所吸引了(不要问我为什么),遍和一旁的种花园丁交(J)流(L)了起来. 他发现花的摆 ...

  3. BZOJ4358: permu(带撤销并查集 不删除莫队)

    题意 题目链接 Sol 感觉自己已经老的爬不动了.. 想了一会儿,大概用个不删除莫队+带撤销并查集就能搞了吧,\(n \sqrt{n} logn\)应该卡的过去 不过不删除莫队咋写来着?....跑去学 ...

  4. Codeforces Round #392 (Div. 2)-758D. Ability To Convert(贪心,细节题)

    D. Ability To Convert time limit per test 1 second Cmemory limit per test 256 megabytes input standa ...

  5. 洛谷P3247 [HNOI2016]最小公倍数(分块 带撤销加权并查集)

    题意 题目链接 给出一张带权无向图,每次询问\((u, v)\)之间是否存在一条路径满足\(max(a) = A, max(b) = B\) Sol 这题居然是分块..想不到想不到..做这题的心路历程 ...

  6. cf1061D 贪心+multiset 好题!

    cf上的思维题真好! 本题是在模拟的基础上贪心即可:将n段时间按照左端点(右端点为第二关键字)从小到大排序,然后遍历每一个时间段. 对于每一个时间段[li,ri],先找到multiset中最靠近li但 ...

  7. ZOJ 3963 Heap Partition(multiset + stl自带二分 + 贪心)题解

    题意:给你n个数字s1~sn,要你把它们组成一棵棵二叉树,对这棵二叉树来说,所有节点来自S,并且父节点si<=子节点sj,并且i<j,问你树最少几棵二叉数.树 思路:贪心.我们往multi ...

  8. 模拟费用流 & 可撤销贪心

    1. CF730I Olympiad in Programming and Sports 大意: $n$个人, 第$i$个人编程能力$a_i$, 运动能力$b_i$, 要选出$p$个组成编程队, $s ...

  9. Codeforces 515C 题解(贪心+数论)(思维题)

    题面 传送门:http://codeforces.com/problemset/problem/515/C Drazil is playing a math game with Varda. Let’ ...

随机推荐

  1. 安装Hama的基本过程

  2. linux 下安装mysql5.7.17

    安装前的环境准备 linux 环境准备 内核参数建议值 1.调整最大文件数限制 直接执行 ulimit -n 65535 或写入/etc/sysctl.conf  重启后生效 2.修改IO 调度器设置 ...

  3. redis设置自动启动

    按照如下操作即可(可以自定义目录) mkdir /redis cd /redis wget http://download.redis.io/releases/redis-4.0.1.tar.gz t ...

  4. scip 练习2.18

    (define (append a b ) (if (null? a )b (cons (car a) (append (cdr a) b)))) (define (reverse l) (appen ...

  5. js求100以内的素数

    //打印2~100之间的数 ; i< ; i++){ var a = true; ; j < i; j++){ //判断i能否被j整除 ){ //能被整除则说明不是素数,修改布尔值为fal ...

  6. 记录一下webpack好用的node模块

    postcss-loader autoprefixer: 自动添加css前缀 css-loader: 能在js文件中导入css(配合React比较好,我猜) style-loader: 将所有的计算后 ...

  7. Delphi locate函数

    使用ADO等数据控件的时候,经常会用到 locate 函数,在结果数据集中查询和定位,下面介绍一下: (一) function Locate(const KeyFields: String; cons ...

  8. 8.RabbitMQ 消息传递Java对象

    通过消息服务器传递Java对象,Java类必须实现序列化接口,可以把Java对象转化为字节数组,从消费者或生产者传递到另外一个JVM中,一定需要两个JVM共享这个类,比如是UserInfo类.   1 ...

  9. iOS开发inputView和inputAccessoryView

    1.简介 起初看到这两个属性是在UIResponder中,只是可读的: @property (nullable, nonatomic, readonly, strong) __kindof UIVie ...

  10. <mysql>mysql基础学习

    1.Join语法 JOIN 按照功能大致分为如下三类: INNER JOIN(内连接,或等值连接):取得两个表中存在连接匹配关系的记录. LEFT JOIN(左连接):取得左表(table1)完全记录 ...