【伪语法基础】输入输出练习2
2018-03-25 12:14
155 查看
时间限制 : 10000 MS 空间限制 : 2200 KB
第二行n个整数。
2 7 4 2 7 2 7
7 8 8 7 7 8 2 8 2 2
0<=每个数<=10^18
注意内存限制。
回忆一个经典的例题,一个数列中只有一个数出现了奇数次,其他数都出现了偶数次,求这个出现奇数次的数。比较经典的做法是使用位运算中的异或运算,把所有数异或起来,所得的数就是答案。这个算法的实质是将每个数二进制化,一个数出现多少次其每一位的1就出现多少次,再结合异或运算的性质,便得解了。类比这种思想,我们开三个变量a0,a1,a2a0,a1,a2分别记录出现次数模3为0,1,2的二进制位有那些,那么加入一个数x<
ea8d
/span>x可得转移(其他几个类似):a0=(a0 xor (a0 and x)) or (a2 and x)a0=(a0 xor (a0 and x)) or (a2 and x)依次加入数列中的每一个数就得解了。本题也用到了类似状态压缩的思想,也说明二进制可离线处理一些数字出现次数的问题。
问题描述
给你n个整数,里面有很多重复的数。其中只有一个数出现了3k+1次,其他都是3的倍数次。现在要你找出这个数。输入格式
第一行一个整数n。第二行n个整数。
输出格式
一个正整数,出现3k+1次的那个数。样例输入1
72 7 4 2 7 2 7
样例输出1
4样例输入2
107 8 8 7 7 8 2 8 2 2
样例输出2
8提示
1<=n<=10^6,显然n是一个3k+1型的数0<=每个数<=10^18
注意内存限制。
题解
题目本身很水,随便开个map什么的就可过,然而本题内存限制只有2M……回忆一个经典的例题,一个数列中只有一个数出现了奇数次,其他数都出现了偶数次,求这个出现奇数次的数。比较经典的做法是使用位运算中的异或运算,把所有数异或起来,所得的数就是答案。这个算法的实质是将每个数二进制化,一个数出现多少次其每一位的1就出现多少次,再结合异或运算的性质,便得解了。类比这种思想,我们开三个变量a0,a1,a2a0,a1,a2分别记录出现次数模3为0,1,2的二进制位有那些,那么加入一个数x<
ea8d
/span>x可得转移(其他几个类似):a0=(a0 xor (a0 and x)) or (a2 and x)a0=(a0 xor (a0 and x)) or (a2 and x)依次加入数列中的每一个数就得解了。本题也用到了类似状态压缩的思想,也说明二进制可离线处理一些数字出现次数的问题。
代码
#include<stdio.h> using namespace std; typedef long long ll; ll n,x,a0,a1,a2,t0,t1,t2; int main() { scanf("%lld",&n),a0=(1ll<<62)-1; while(n--) { scanf("%lld",&x); t0=(a0^(a0&x))|(a2&x); t1=(a1^(a1&x))|(a0&x); t2=(a2^(a2&x))|(a1&x); a0=t0,a1=t1,a2=t2; } printf("%lld\n",a1); return 0; }
相关文章推荐
- java基础语法练习--输入年月日确定星期几
- C++语法基础--标准IO库--文件的输入和输出(fstream,ifstream,ofstream)
- java基础语法练习--输入一串字符统计各字符数目
- Python语法基础_控制语句_输入输出语句详解
- 黑马程序员——Java基础——IO输入与输出_2
- java switch语句练习 从键盘输入2个数和一个运算符(+,-,*,/),输出运算结果
- (c语法百题11)输入一个数 ,输出其绝对值
- 各程序语言基础语法练习-持续更新
- python基础 输入与输出
- Java做acm所需要的基础知识之基本输入输出问题
- [Java练习]输入一个字符串,输出其中某个小写字母出现的次数
- Javascript:基础(输出/编辑内容、编辑属性、事件响应、输入验证)
- 练习5: 输入一个一维数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
- Linux(RadHat)基础学习—vim编辑器及文件的输入输出
- 练习go基础语法
- 编码练习——Java-8-输入/输出
- C程序freopen()实现快速从文件输入和输出(重定向)到文件(ACM练习好帮手)
- 练习5: 输入一个一维数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
- 练习 2017-8-14 缓冲字节/字符 输入/输出 流~ 字符的编码和解码
- C语言基础学习基本数据类型-字符专属的输入输出函数