- 博客(18)
- 收藏
- 关注
原创 PKU3032 Card Trick
这些牌是一张一张的抽出来压回底下去的,并且翻开后的牌不再加回去洗.这里可以用逆向思维,首先最后一张牌一定是N,然后在他上面放一张N-1,在从底下一张张的抽牌放回顶上面,做N-1次,然后再在这洗好的2张牌上面放N-2,在从底下抽牌放上来,重复N-2次,直到最后放上1,洗1次,结束后就得到最初的牌局了.
2008-05-25 16:38:00
368
原创 PKU3026 Borg Maze
BFS+MST因为题目里说"Whenever an alien is assimilated, or at the beginning of the search, the group may split in two or more groups",就是说只有在有A的地方他的意识才可以分裂.所以先用BFS求出每个A到其他所有A的最短距离(把自己S也看成A).然后以每个A为
2008-05-20 21:00:00
475
原创 PKU3385 Genealogy
看样子Alien Peter不应该是地球人,应该来自外太空,否则d全部等于2.外星人就可能不止有两种性别;了哦.算法很简单了,就是统计树里面每个结点有几个儿子,如果大于d就算出至少添加多少个结点。显然每加一个点,就可以使儿子数减少d-1个,那么对与一个点,所要添加的个数△=(n-d)/(d-1) 取上整
2008-05-20 20:54:00
462
原创 PKU3274 Gold Balanced Lineup
用Sum[i][k]表示从第1头到第i头牛,特征k出现的次数之和。则题目所求就是找到一对i,j,满足Sum[i][1]-Sum[j][1]=Sum[i][2]-Sum[j][2]=Sum[i][3]-Sum[j][3]……=Sum[i][k]-Sum[j][k];稍微变形一下就是要满足:Sum[i][2]-Sum[i][1]=Sum[j][2]-Sum[j][1];Sum[i][3]-Sum[i]
2008-05-16 11:19:00
628
原创 PKU1411 Calling Extraterrestrial Intelligence Again
先筛出所有质数p,q可能的取值,再用两重循环枚举。因为4=2 所以p,q的范围可以缩小到2~50000。又因为1a/b>=0.001 考虑9091这个数: 2/9091=0.00022 3/9091=0.00033 5/9091=0.00055 7/9091=0.00077 均小于0.001,所以2,3,5,7均不能作为p. 而11*9091=100001>100000; 所以无论如何
2008-05-15 16:13:00
446
原创 PKU2421 Constructing Roads
和典型的最小生成树不同,这里的有些边已经是一定要选进去的,是用Kruskal+并查集(麻烦),还是Prim(简单)呢?我们的答案是否定的。其实只要把已经建好的路的长度改为0就可以用Prim了。
2008-05-12 12:23:00
347
原创 PKU3078 Q
开始时不知道他的样例是怎么算出来的,但是注意到题目中有一句:Multiple queue operations are applied at the same time即所有的位置转换都是第一步就完成的,而不是通常想的依次完成的.
2008-05-09 23:35:00
352
原创 PKU1753 Flip Game
显然是用BFS做,注意点有:1.用一个16位的二进制数表示一个状态,这样状态最多有0~65535种,就可以开个hash判重。2.因为目标接点确定,所以先预处理算出从全为0到各个状态的最小步数,全为1到各个状态的最小步数,然后再读入数据,选两个里面步数小的即可。
2008-05-09 00:02:00
616
原创 PKU1141 Brackets Sequence
动态规划,具体方法见刘汝佳书的P115 值得注意的是题目中有这样的描述: 1. Empty sequence is a regular sequence. 所以如果输入一个空行,就要输出一个空行。这样的话输入就要用gets()了,而不是scanf("%s")了。然后你就可以知道ZJU1463为什么会WA了
2008-05-08 16:26:00
362
原创 pku1064 Cable master
显然,如果长度X是可行的,即用长度X切出来的总电缆数≥需要的电缆数那么对于长度Y<X也是可行的。所以本题用二分+判定解决!开始时最小长度s=1,最大长度t=max{仓库中所有电缆},二分法要到s>t时才结束。详见刘汝佳书P69
2008-05-06 10:32:00
542
原创 PKU2418 Hardwood Species
一开始我用快排O(nlogn)+扫描O(n),结果超时。所以不能对全部1000000个字符串进行排序。但是不同的字符串总共只有10000个,所以用二叉树的话,最多只有10000个结点,这样把每个字符串依次插入BST里面,统计其出现的次数,最后中序遍历输出即可。另外,要相信自己的人品,此题用不着平衡二叉数。
2008-05-05 12:42:00
344
原创 PKU2492 A Bug's Life
原来同性*不仅人有,连虫子也有,大开眼界了!!本题用并查集实现,在朴素的并查集基础上增加一个R[i],表示第i个元素和他直接相连的父亲是否相同,R[i]=0表示相同,R[i]=1表示不相同。查找父亲时把沿途的R[i]相加得到SUM,路径压缩时把沿途的R[i]依次从SUM中减去,就可以知道每个元素和他根结点之间的关系了。PS:强烈不推荐并查集按Rank启发式合并~~乱合并的速度更快!
2008-05-04 18:19:00
540
原创 PKU1062 昂贵的聘礼
此题可以用最短路径解决。先不考虑部落里的等级观念,把第i件物品看作结点i,再增加一个结点0,表示探险家。对于物品i,如果原价是P,就从结点0到结点i连一条权为P的边。如果有替代品Ti和该替代品所对应的"优惠"Vi,就从结点Ti到i连一条权为Vi的边。因为探险家不会用多样东西去换一样东西,所以从点0到点i的一条路径就表示探险家可以得到物品i 所以以点0为源点做一次Dijkstra,算出点0到点1的最
2008-05-04 13:17:00
699
原创 PKU2253 Frogger
此题要求一条从V1到V2的路径,使得路径上最长的边距离最小。用G[i][j]表示从点i到点j最长边的最小值,如果从点i到点j经过了点k,则G[i][j]=min(max(G[i][k],G[k][j]),G[i][j])模仿Floyed的三重循环,最后输出G[1][2]即可。另外由于计算过程只涉及比较,所以可以令G[i][j]为点i到点j距离的平方,只在输出是将其开根号。
2008-05-04 10:21:00
326
原创 PKU1833 排列
由一个已知的1~N的排列生成它的下一个排列的方法:1、从右向左寻找第一个升序位置,即最右的数字比左边的大的位置,即满足A[j]2、从j开始向右寻找满足A[k]>A[j]的k的最大值;3、交换A[j]和A[k];4、将A[j+1]至A[n]反向。
2008-05-03 21:51:00
325
原创 PKU3253 Fence Repair
把一块木板据成N块不好想的话,那么把这个过程反过来:把N块木板拼成一块,每拼一次所需代价是两块木板长度之和。这样就是很明显的哈夫曼树了。每次从现有的木板中选取最短的两块木板,拼在一起变成新的一块后放回去,重复这个过程直到只剩一块木板。用最小堆实现以上操作就不会超时。
2008-05-03 21:03:00
410
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人