题意:给你若干个数对,每个数对有两个属性,一个属性是权值,一个属性是位标志,假设这些数对的的权值和是sum,你可以选择一个二进制数s,与所有的数对的位标志按位与,如果按位与之后的位标志有奇数个1,那么权值的符号就会翻转(正变负,负变正),现在需要找到一个数s,使得进行这样的操作后sum的符号变了。

思路:从高位向低位枚举,判断这一位需不需要选择。把当前位是最低位的所有的数对的权值加起来,如果大于0,那么这位置1后权值就会减小,然后把所有这位为1的数对的权值翻转。

代码:

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

  

最新文章

  1. PL/SQL设置主键自增
  2. Shell 编程基础之 &amp;&amp; 与 ||
  3. xxx.app已损坏,打不开.你应该将它移到废纸篓 macOS 10.12 Sierra
  4. RecycleView + CardView 控件简析
  5. LCLFramework框架之Repository模式
  6. Jackson - Features for configuring Java-to-JSON mapping
  7. android签名相关
  8. 模拟uClinux系统调用
  9. Linux背景知识(1)RedHat和Centos
  10. SLF4J - 借助SLF4J, 统一适配所有日志实现为logback日志实现的实践
  11. 前端入门21-JavaScript的ES6新特性
  12. java代理通俗简单解析
  13. 记一次nginx强制将https请求重定向http
  14. HDU 1007(套圈 最近点对距离)
  15. MySQL MySql连接数与线程池
  16. 初尝Web API《转》
  17. mpvue 使用echarts动态绘制图表(数据改变重新渲染图表)
  18. linux内核分析--计算机是如何工作的
  19. RabbitMQ 客户端开发向导
  20. 第三百一十四节,Django框架,自定义分页

热门文章

  1. 使用Surface View来显示图片
  2. gcc 交叉工具链中工具使用(arm-linux-xxx)
  3. Codeforces 353E 贪心
  4. ubuntu 搜狗输入法内存占用太多,卡顿不够处理办法
  5. js error监控
  6. C++ 字符串截取转换及字符流控制
  7. iSkysoft iMedia Converter Deluxe Mac如何制作视频?视频格式转换工具制作动图的方法
  8. 【leetcode】931. Minimum Falling Path Sum
  9. mysql查询诊断分析工具
  10. Promise、async、await 异步解决方案