随笔分类 - acm
位运算 的探究
摘要:给学弟出了一道题, 告诉你n个数, 其中只有一个数出现一次, 其他的数都出现三次.求出现一次的那个数.
学弟发给我一个代码, 第一眼竟然没看明白.
int run(int n, int* A) {
int ones = 0;// 出现一次的标志位
int twos = 0;// 出现第二次标志位
for(int i = 0; i n; i++) {
ones = (ones ^ A[i]) & ~twos;
twos = (twos ^ A[i]) & ~ones;
}
return ones;
}
阅读全文
2014年北京网络赛 Instrusive HDU 5040 题解 优先队列
摘要:网赛的时候看了这道题,发现就是平常的那种基础搜索题。
由于加了一个特殊条件:可以一次消耗3秒或原地停留1秒。
那就不能使用简单的队列了,需要使用优先队列才行。
题意
告诉一副地图:一个起点,一个终点,若干墙,若干监视器,剩下的是空地。
起点,终点,监视器都算空地。
监视器初始值会指定一个方向,共有四个方向。
监视器每秒顺时针转动到下个方向。
监视器视野距离为2.
在监视器的位置或在监视器面向的格子是监视区域。
普通的移动一格需要消耗1秒时间。
在监视器下移动一格需要消耗3秒时间。
如果呆在原地不动,即使在监视器视野内也不会被发现。
求最少时间从起点到达终点。
不能到达输出-1。
阅读全文
【百度之星2014~复赛 解题报告~正解】The Query on the Tree
摘要:昨天写了 The Query on the Tree 的解题报告,但是遗留下一个问题,不能算是完美解决这道题.
因为如果精心构造数据的话,昨天的题解还是会被卡住的.
今天中午睡觉的时候突然想起一个不会被卡住的方法.
题意
有一棵树,树的每个点有点权,每次有三种操作:
1. Query x 表示查询以x为根的子树的权值和。
2. Change x y 表示把x点的权值改为y(0=y=100)。
3. Root x 表示把x变为根。
阅读全文
【百度之星2014~复赛)解题报告】The Query on the Tree
摘要:这几天把毕业答辩的事弄完了,于是买票出来玩,结果周六是百度之星的复赛,于是我就没有办法来做比赛了,不过看了看题,目测可以过我两三道题.
今天已经是比赛的第二天了,我还一直没有时间来A掉这些题,今晚抽空先把最简单的线段树那道题A了再说.
题目说的很清楚了,自己看吧.
有一棵树,树的每个点有点权,每次有三种操作:
1. Query x 表示查询以x为根的子树的权值和。
2. Change x y 表示把x点的权值改为y(0=y=100)。
3. Root x 表示把x变为根。
阅读全文
【百度之星2014~初赛解题报告】
摘要:最近要毕业了,有半年没做比赛了.
这次参加百度之星的初赛娱乐一下.
现在写一下解题报告.
还是先看看四道题的类型吧
1.Scenic Popularity 暴力 复杂度O( 100 * 100 * 10000 ) 或者O( T * K * R) 线段树
2.Chess DP 复杂度 O(n^2)
3.Best Financing DP 复杂度O(n)
4.JZP Set 数论或DP 复杂度 O(n * log(n))
阅读全文
【百度之星2014~初赛(第二轮)解题报告】JZP Set
摘要:最近要毕业了,有半年没做比赛了.
这次参加百度之星第二轮娱乐一下.
现在写一下 JZP Set 这道题的的解题报告.
题意是:给你n个数(1到n),给你一个规则,问用这个规则可以得到多少个合法的集合.
具体规则是:一个合法集合里任意挑两个数,如果这两个数之和是偶数,这个偶数除以2得到的数也要在这个合法集合里.
比如: 3 和9 在集合里,3+9是偶数,所以 (3+9)/2 = 6 也要在这个集合里.然后 {3,6,9}就是一个合法的集合.
阅读全文
【百度之星2014~资格赛解题报告】
摘要:最近要毕业了,有半年没做比赛了.
这次参加百度之星娱乐一下.
现在写一下解题报告.
这次比赛大牛都不屑于做百度之星了,于是我很幸运达到前百名,百度不知道会不会实现说的那样发一件衣服.
这次比赛有四道题,起初只是随便做做,所以我是倒着做的.
先看看四道题的类型:
Energy Conversion 暴力 复杂度 O( log(n) )
Disk Schedule DP 复杂度 O( n ^ 2)
Xor Sum 字典树 复杂度 O( 32n )
Labyrinth DP 或搜索 复杂度 O(n*m)
阅读全文
【百度之星2014~初赛(第二轮)解题报告】Chess
摘要:最近要毕业了,有半年没做比赛了.
这次参加百度之星娱乐一下.
现在写一下 Chess 这道题的的解题报告.
题意很简单,告诉你一个矩阵,以及一个起始坐标.
问走k步有多少个不同的路线.
一个路线可以记为上下左右,则k步有k个上下左右,比如 "上上左左下下" 是一个路线.
阅读全文
关于 double sort 这道题的思考
摘要:前几天学弟学妹们有一场比赛,学弟邀请我作为技术支持者去帮忙,在那个过程中我看了几道题。
其中有两道题正常比赛没有其他人提交,于是我研究了一下。
研究的第一道就一个暴力dfs就可以过,只是可能正常比赛没人看懂题意,我看了好几个小时才看懂的。
第二道就是 double sort。
什么是 double sort 呢?
就以题目中的讲解例子来说说吧。
题目说对于一组数 [5; 4; 3; 2; 1], 如果只可以交换相邻的数字,要使这组数达到升序至少需要 10 步。
这个很好理解,假设一个数字要和左面的数字交换,那只有一种情况。
但是对于两组数 [5,5; 4,4; 3,3; 2,2; 1,1] 来说,也是只能交换相邻的数字。这是一个数字和左面的数字交换时就有两种情况了。
比如对于 4 可以和 第一个5交换,也可以和第二个5交换。
目标是使这两组数字达到升序。题意还说这个例子的答案是 15 ,不是 20.
阅读全文
vijos 1243 生产产品 单调性优化动态规划
摘要:描述 Description在经过一段时间的经营后,dd_engi的OI商店不满足于从别的供货商那里购买产品放上货架,而要开始自己生产产品了!产品的生产需要M个步骤,每一个步骤都可以在N台机器中的任何一台完成,但生产的步骤必须严格按顺序执行。由于这N台机器的性能不同,它们完成每一个步骤的所需时间也不同。机器i完成第j个步骤的时间为T[i,j]。把半成品从一台机器上搬到另一台机器上也需要一定的时间K。同时,为了保证安全和产品的质量,每台机器最多只能连续完成产品的L个步骤。也就是说,如果有一台机器连续完成了产品的L个步骤,下一个步骤就必须换一台机器来完成。现在,dd_engi的OI商店有史以来的第
阅读全文
乘法逆元
摘要:定义:满足a*k≡1 (mod p)的k值就是a关于p的乘法逆元。为什么要有乘法逆元呢?当我们要求(a/b) mod p的值,且a很大,无法直接求得a/b的值时,我们就要用到乘法逆元。我们可以通过求b关于p的乘法逆元k,将a乘上k再模p,即(a*k) mod p。其结果与(a/b) mod p等价。证:(其实很简单。。。)根据b*k≡1 (mod p)有b*k=p*x+1。k=(p*x+1)/b。把k代入(a*k) mod p,得:(a*(p*x+1)/b) mod p=((a*p*x)/b+a/b) mod p=[((a*p*x)/b) mod p +(a/b)] mod p=[(p*(a*
阅读全文
约瑟夫环的数学方法
摘要:无论是用链表实现还是用数组实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比较烦,而且时间复杂度高达O(nm),当n,m非常大(例如上百万,上千万)的时候,几乎是没有办法在短时间内出结果的。我们注意到原问题仅仅是要求出最后的胜利者的序号,而不是要读者模拟整个过程。因此如果要追求效率,就要打破常规,实施一点数学策略。 为了讨论方便,先把问题稍微改变一下,并不影响原意: 问题描述:n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出 ,剩下的人继续从0开始报数。求胜利者的编号。 我们知道第一个人(编号一定是(m-1)%n) 出列之后,剩下的n-1个人组成了一个新的约瑟夫环(以编号
阅读全文
浙公网安备 33010602011771号