奇妙糖果屋

Time Limit : 3000/1000ms (Java/Other)   MemoryLimit : 65535/32768K (Java/Other)

Total Submission(s) : 13   Accepted Submission(s) :11

Problem Description

奇异王国里有很多奇怪的事物。比如奇怪的人(每个人都拥有一个智慧值),奇怪的商店......

这不,奇异糖果屋今天开业了,老板在门口拉上了“糖果送送送”的横幅来吸引顾客。

糖果的具体赠送方案为对于一个智慧值为x的人来说,他所能获得的糖果数量f(x)满足如下条件:

1.f(0)= 0,
2.f(2x) =f(x),
3.f(2x+1) =f(2x) +1,

整天搞怪的小A带着朋友们闻讯而来,他想出了一个游戏,游戏的规则是这样的:每个人根据自己的智慧值拿到糖果后互相比较开心值,开心值最大的人即为胜者。

开心值的定义为除了自己以外其他所有人获得糖果数量的异或值。

但是小A只负责搞怪,目前已知每个人的智力值,聪明的你能否帮助他提前知道谁能获胜以及这个人的开心值为多少呢?

每个人按照给定顺序从1开始编号。如果有多个人的开心值相等,则编号最小的获胜。

Input

输入数据的第一行是一个整数T,表示测试实例的个数,保证T<=100。
每组输入数据占两行。
第一行为一个整数n,代表去糖果屋的人数。(1<=n<=105)
第二行为n个整数,代表每个人的智力值ai。(1<=ai<=109)
题目保证n>=50000的数据组数不超过10组。

Output

每组数据输出两个整数,依次表示获胜的人的编号以及他所获得的开心值,中间用空格隔开。

Sample Input

1

2

3 4

Sample Output

2 2

【思路】

我们对f(x)进行分析后,发现f(x)的值便是x的二进制表示中1的个数。那么我们只要调用__builtin_popcount()函数即可以快速求出每个人获得的糖果数。当然手动模拟也可以。

这里,我们在读入的时候顺便保存每个人获得糖果数的异或总和sum。根据异或的性质:a ^ b ^ b=a ,对于每个人我们只要用他所获得的糖果数异或sum便是他的开心值。

扫一遍保存最大值即可。

#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn = 100005;
const ll mod = 1e9+7;
const ll INF = 0x3f3f3f3f;
const double eps = 1e-9;
int a[maxn];int main()
{int n;int T;scanf("%d",&T);while(T--){scanf("%d",&n);int Max=-1;int pos=0;int sum=0;for(int i=1;i<=n;i++){scanf("%d",&a[i]);a[i]=__builtin_popcount(a[i]);sum^=a[i];}for(int i=1;i<=n;i++){if((sum^a[i])>Max){Max=(sum^a[i]);pos=i;}}printf("%d %d\n",pos,Max);}return 0;
}

这位大神的Dust_Heart

奇妙糖果屋 【二进制+异或】相关推荐

  1. 二进制异或--7.18待完善

    对于一个数组a1a_1a1​,a2a_2a2​,--,ana_nan​,定义如下函数fff: f(a1,a2,--,an)={a1,n=1f(a1⊕a2⊕a3⊕--an−1⊕an),n>1f(a ...

  2. 神殿【二进制异或】2018河北省程序设计 H题

    神殿 题目描述: icebound通过勤工俭学,攒了一小笔钱,于是他决定出国旅游.这天,icebound走进了一个神秘的神殿.神殿由八位守护者守卫,总共由64个门组成,每一道门后都有一个迷宫,迷宫的大 ...

  3. 【2020.10.28SSL普及模拟赛T4】最大异或和【二进制 异或】

    分析 先拆分二进制 统计1个数 因为不能有两个0 或两个1 统计出每个数二进制下1 的个数 如果只有1 位1 则直接算 2 i 2^i 2i 要么则后面的都可以为1 可以选 全部累加成 2 j 2^j ...

  4. leetcode 107. 二叉树的层次遍历 II(维护两个队列,通过异或运算切换)

    题目 思路 一个比较啰嗦的解法 维护两个queue,当前队列节点的孩子,都放进另外一个队列里去. 树每切换一层,就切换一次队列,并且把新队列的值全部存起来. 整体上来看,是自顶向下遍历,最后翻转整个l ...

  5. ICG游戏:尼姆游戏异或解法的证明

    描述: 尼姆博奕(Nimm Game),有n堆石子,每堆石子有若干石子,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限.取走最后石子的人获胜. 标准解法: 判断: 先计算先手是必胜还是 ...

  6. 异或运算^和他的一个常用作用

    发现一个新知识,介绍给大家: 二进制异或运算:两者相等为0,不等为1. 这样我们发现交换两个整数的值时可以不用第三个参数. 如a=11,b=9.以下是二进制 a=a^b=1011^1001=0010; ...

  7. c语言中异或指令,C语言总结之异或运算的一些特性及巧妙应用

    原标题:C语言总结之异或运算的一些特性及巧妙应用 1.一个数和自己做异或的结果是0.如果需要一个常数0,x86平台的编译器可能会生成这样的指令: xorl %eax, %eax.不管eax寄存器里的值 ...

  8. 选择排序、冒泡排序、异或运算

    选择排序 数组取数时间复杂度是常数 int a= arr[i] 从数组中获取第i位置的数即获取某个偏移量或距离的数 时间复杂度是一个常数 数组在内存中的地址空间是连续的 所以通过偏移量就可以获取到指定 ...

  9. 认识异或运算的本质与基本规律,0^x=x,x异或x=0,有交换律,结合律,与顺序无关

    认识异或运算的本质与基本规律,0^x=x,x异或x=0,有交换律,结合律,与顺序无关 提示:异或运算系列文章 非常重要的算法技巧:异或运算!! 为了破解以下这些重要的题目: (2)数组arr中,有一个 ...

最新文章

  1. Centos 6.4 搭建LANMP一键安装版
  2. dhl: js判断网页对象是否存在
  3. linux下编译软件通用方法(memcached为例)
  4. mysql出现ERROR 1054 (42S22): Unknown column 'password' in 'field list'如何解决?
  5. python 编码问题之终极解决
  6. 纪元java游戏_RPG纪元
  7. 微软云打印将直接与 OneDrive 集成;全球 90 多家组织敦促苹果放弃引入”儿童安全”功能计划……...
  8. python输入姓名_Python 用户输入用户名,进行验证
  9. 学习分布式技术,技术人看这里
  10. php url路由入门实例,ThinkPHP URL 路由实例
  11. [C++]实现10以内整数的简单科学计算器
  12. 层次聚类算法_机器学习理论(十四)聚类
  13. 如何使用网易有道词典翻译英文文档(word格式、pdf格式)
  14. python泰勒公式_泰勒展开式利用python数值方法证明
  15. 图片边框border-image
  16. 电脑怎么用c语言写丘比特,C语言丘比特#includebr/#includebr/ 爱问知识人
  17. 用计算机技术辅助语文教学,计算机技术相关论文范文文献,与计算机辅助语文教学相关毕业论文模板...
  18. C语言四轴联动程序,四轴联动程序中F值不恒定之解决方案
  19. Docker私有仓库与Harbor部署使用
  20. 电脑开机黑屏,只有鼠标能动

热门文章

  1. PS基础知识:PS钢笔和路径工具应用知识
  2. Golang解决跨域问题
  3. Spring-Boot-全栈开发:漂亮的邮件注册
  4. 健身房行业研究规划及投资可行性分析
  5. JS逆向-RSA算法加密(房天下模拟登录)
  6. 下载频道2013下半年超人气精华资源汇总---全都是免积分下载。
  7. 项目成功经验分享:做好项目承诺管理
  8. ECMAScript基础知识总结
  9. 【深入理解HTTP协议】破冰篇
  10. 第十一届蓝桥杯大赛(2020年)软件类省赛第二场 Python大学组 真题+个人解答