ACM学习历程—计蒜客15 单独的数字(位运算)
http://nanti.jisuanke.com/t/15
题目要求是求出只出现一次的数字,其余数字均出现三次。
之前有过一个题是其余数字出现两次,那么就是全部亦或起来就得到答案。
这题有些不太一样。
显然,最裸的做法就是cnt[i]表示i出现的次数。然后求出cnt[i]为1的那一个。
然后可能会考虑到,对于这些数字的二进制位来看,某一位二进制位出现3的倍数次的话,那么只出现一次的数字这一位一定是0。如果出现3的倍数加1次,那么自然,只出现一次的数字这一位一定是1。
然后就考虑用cnt[i]表示,这些数二进制第i位,出现1的次数。
最后答案就能用cnt[32]生成了。
时间复杂度O(nlogx),空间32*int。
其实我们考虑的时候,只需要保存cnt[i]%3的结果,也就是说cnt[i]的取指只有0,1,2三种。
那么我们就可以这样来设定状态,cnt[i]表示:当cnt[i]的某位二进制位出现1时,表示这些数字在这一位出现的次数模3是i。
于是就有cnt[1], cnt[2], cnt[3]三种了,而且这三个二进制位的某一个只有一个是1。
接下来考虑状态是怎么转移的。
加入新加入一个x。
这个x的第j位是1。
那么如果cnt[i-1]的第j位是1,cnt[i]的第j位就将要变成1。这是出现进位的情况。
那么如果cnt[i]的第j为是0,自然,除非发生进位,否则还是0。
如果x的第j位是0。
那么如果cnt[i]的第j位是1,那么还是1。
那么如果cnt[i]的第j为是0,那么还是0。
也就是说,新的cnt[i]将有两部分构成,一部分是原有的1,而且没有进位的,还有一部分是进位得到的1。
对于原有没有进位的1,满足原0,现在还是0;原1,来了1,变成0;原1,来了0,还是1;发现~x&cnt[i]满足这个条件。
对于进位得到的1,显然是x&cnt[i-1]。
两部分结合cnt[i] = (x&cnt[i-1])&(~x&cnt[i])。
于是可以时间复杂度O(n)实现。
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib> using namespace std; int main()
{
int n, x, y, z, t, a;
while (scanf("%d", &n) != EOF)
{
x = y = ;
z = ~;
for (int i = ; i < n; ++i)
{
scanf("%d", &a);
t = (a&x)|(~a&y);
x = (a&z)|(~a&x);
z = (a&y)|(~a&z);
y = t;
}
printf("%d\n", x);
}
}
ACM学习历程—计蒜客15 单独的数字(位运算)的更多相关文章
- 爬虫acm比赛成绩(多页成绩整合在一起、获取复制不了的数据)(hihocoder、计蒜客)
https://github.com/congmingyige/web-crawler_rank-of-competition-in-JiSuanKe-and-hihocoder 1. 计蒜客(获取复 ...
- 计蒜客 28449.算个欧拉函数给大家助助兴-大数的因子个数 (HDU5649.DZY Loves Sorting) ( ACM训练联盟周赛 G)
ACM训练联盟周赛 这一场有几个数据结构的题,但是自己太菜,不会树套树,带插入的区间第K小-替罪羊套函数式线段树, 先立个flag,BZOJ3065: 带插入区间K小值 计蒜客 Zeratul与Xor ...
- 计蒜客的一道题dfs
这是我无聊时在计蒜客发现的一道题. 题意: 蒜头君有一天闲来无事和小萌一起玩游戏,游戏的内容是这样的:他们不知道从哪里找到了N根不同长度的木棍, 看谁能猜出这些木棍一共能拼出多少个不同的不等边三角形. ...
- 计蒜客 31436 - 提高水平 - [状压DP]
题目链接:https://nanti.jisuanke.com/t/31436 作为一名车手,为了提高自身的姿势水平,平时的练习是必不可少的.小 J 每天的训练包含 $N$ 个训练项目,他会按照某个顺 ...
- 2019icpc徐州站 Cat 计蒜客 - 42540 && The Answer to the Ultimate Question of Life, The Universe, and Everything. 计蒜客 - 42545
VJ链接:https://vjudge.net/contest/412095#problem/A Cat 计蒜客 - 42540 题意: 给你一个区间[L,R],给你现在拥有的钱S.你需要从[L,R] ...
- 计蒜客 作弊揭发者(string的应用)
鉴于我市拥堵的交通状况,市政交管部门经过听证决定在道路两侧安置自动停车收费系统.当车辆驶入车位,系统会通过配有的摄像头拍摄车辆画面,通过识别车牌上的数字.字母序列识别车牌,通过连接车管所车辆信息数据库 ...
- 计蒜客模拟赛5 D2T1 成绩统计
又到了一年一度的新生入学季了,清华和北大的计算机系同学都参加了同一场开学考试(因为两校兄弟情谊深厚嘛,来一场联考还是很正常的). 不幸的是,正当老师要统计大家的成绩时,世界上的所有计算机全部瘫痪了. ...
- 计蒜客 等边三角形 dfs
题目: https://www.jisuanke.com/course/2291/182238 思路: 1.dfs(int a,int b,int c,int index)//a,b,c三条边的边长, ...
- 计蒜客 方程的解数 dfs
题目: https://www.jisuanke.com/course/2291/182237 思路: 来自:https://blog.csdn.net/qq_29980371/article/det ...
随机推荐
- 关于JS解析编历JSON数组(含多维数组)
第一部分: ].xing) 第二部分: } 解释: countryObj 为value对象的一个属性明 value[coun ...
- 20145219 《Java程序设计》第08周学习总结
20145219 <Java程序设计>第08周学习总结 教材学习内容总结 通用API 日志API 1.java.util.logging包提供了日志功能相关类与接口,使用日志的起点是log ...
- C++二阶构造函数
转自:http://blog.51cto.com/9291927/1896411 一.构造函数的问题 构造函数存在问题: A.构造函数只提供自动初始化成员变量的机会 B.不能保证初始化逻辑一定成功,如 ...
- 深入解析Linux内核及其相关架构的依赖关系
Linux kernel 成功的两个原因: 灵活的架构设计使得大量的志愿开发者能够很容易加入到开发过程中:每个子系统(尤其是那些需要改进的)都具备良好的可扩展性.正是这两个原因使得Linux kern ...
- windows技巧--优雅的设置环境变量,其实只是为了节约几秒宝贵的时间
优雅的设置windows环境变量 环境变量的作用 将应用程序设置在环境变量以后,可以直接在cmd里面或者运行窗口中执行程序 分类 系统环境变量 对系统中所有用户有效,修改过后要重启生效 用户环境变量 ...
- camera corder profile
/system/etc/ 其中的qulity high 必须与 最大的支持的分辨率相同. 不然cts 不过. 这里的配置必须在报告给app的数据匹配.
- eclipse中的错误解决——The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
看看我们遇到的问题 解决问题
- C语言查找算法之顺序查找、二分查找(折半查找)
C语言查找算法之顺序查找.二分查找(折半查找),最近考试要用到,网上也有很多例子,我觉得还是自己写的看得懂一些. 顺序查找 /*顺序查找 顺序查找是在一个已知无(或有序)序队列中找出与给定关键字相同的 ...
- Windows安装Ubuntu桌面操作系统到移动硬盘中以及错误解决
用到的工具:U盘一个(usb3.0,你懂的),移动硬盘(我这个是笔记本里面取出来的机械硬盘装上的盒子) 第一步:下载Ubuntu系统iso镜像文件 下载Ubuntu系统iso镜像文件,由于我是新手,下 ...
- 2015 Syrian Private Universities Collegiate Programming Contest
A. Window B. Paper Game Des:给你一个矩形集合,一开始只有一个W*H的矩形.每次可以选一个矩形,切成两个并加入集合,长和宽必须是正整数.不能操作者输,求先手赢还是输.(1 ≤ ...