- 博客(10)
- 收藏
- 关注
原创 poj-2361
解题思路:由于X先走并且两个人轮流执子,所以当网格图无效的时候,存在下列5种情况: (1)O的个数大于X (2)X的个数至少比O大2 (3)O和X同时赢 (4)X赢,但是双方的棋子数一样 (5)O赢,但是双方棋子数不同 技巧:用一个标志位flag来判断是否合法,尤其注意掌握判断行、列、对角线的元素是否相同的方法,技巧性较强。#includechar plan
2015-11-25 10:54:49 841
原创 poj-2612
解题思路:题目其实不难,但是处理的时候技巧性很强,在输入过程中利用标志flag直接判断有无触发地雷,直接省去了两个for循环。多次使用a?b:c的结构,省去了大量不必要的判断语句,其实解题时还要注意的就是,我们应该把所有的点周围的地雷数利用二重循环存储到数组中,而不应该在判断的时候在临时计算。此题给我最大的启发就是,提前将一些要计算的算好存起来,不要一边判断一边计算,效率极低还易出错。#inclu
2015-11-25 01:37:57 848
原创 poj-2608
#includeint main(){ char *alpha="ABCDEFGHIJKLMNOPQRSTUVWXYZ";//用字符数组存储字母 char *num="01230120022455012623010202";//用字符数组存储对应的数字字符 char ch,last; last='0';//last的主要作用是判断是否输出和剔除重复数字。 while((ch=g
2015-11-23 03:12:16 676
原创 poj-2538
解题思路:用一个字符数组存储键盘上面的字符,利用putchar和getchar进行输入输出字符,找到对应字符出现的位置,输出其前面一个即可,采用字符数组避免了大量的switch/case语句。#includeint main(){ char *s="`1234567890-=QWERTYUIOP[]\ASDFGHJKL;'ZXCVBNM,./";//用字符数组的形式存储元素,省去了大
2015-11-23 02:07:43 883
原创 poj-1597
解题思路:题目的意思就是一个生成随机数的函数, seed[x+1] = ( seed[x] +step) % mod,判断这个随机生成函数的好坏的依据是如果能够产生0~mod-1内的所有数,就是一个好的,否则坏。假设在k步之后,seed[k] = seed[0],故有seed[k] = ( seed[0] +step*k ) % mod=seed[0],显然step* k
2015-11-23 01:19:22 975
原创 poj-1528
题目不难,主要注意输出格式即可。#include #include //有此头文件才可以用printf输出方式。 #include//包含cout输出格式的头文件 using namespace std;int main(){ int i,n,a[120]; printf("PERFECTION OUTPUT\n"); while(scanf("%d",&n))
2015-11-22 13:44:48 590
原创 poj-2234
此题属于尼姆博奕(Nimm Game):有n堆各若干个物品,两个人轮流从某一堆取任意多(或者最多m个,只需把每堆%m)的物品,规定每次至少取一个,多者不限,最后取光者得胜。 强记策略: n堆物品数量对应的n个二进制数,连续n-1次异或运算,若结果为0,则说明所有位平衡,后者获胜,若结果为1,则说明存在非平衡位,前者获胜。#includeusing namespace std;int
2015-11-22 00:01:43 667
原创 poj-1852
解题思路:我们直接忽略蚂蚁的相遇事件,假设所有的蚂蚁即使相遇了也不会做出改变,仍然走自己的路。这样每一个蚂蚁掉落的时间就只有2个取值,一个是向左走的时间,一个是向右走的时间,全部掉落的最早时间是每只蚂蚁尽快掉落用时的最大值,因为这些蚂蚁现在互不干扰,同理,全部掉落的最迟时间就是每只蚂蚁尽量慢掉落用时的最大值。#include#includeusing namespace std;in
2015-11-21 20:59:32 783
原创 poj2573
解题思路:由于一次过桥最多两个人,且手电筒需要往返传递,因此以两个成员过桥为一个分析单位,计算过桥时间,我们按照过桥时间递增的顺序将n个成员排序,设当前序列中,A是最快的人,B是次快的人,a是最慢的人,b是次慢的人。又两种过桥方案:(1)用最快的成员传递手电筒帮助最慢和次慢的人过桥,所有时间为2*A+a+b;(2)用最快和次快的成员传递手电筒帮助最慢和次慢的人过桥:步骤如下
2015-11-21 16:28:26 990
原创 poj-2661-Factstone Benchmark
解题思路:在1960年,字的大小是4位,以后每十年翻一番,就意味着,y年的字的位数为k=pow(2,(y-1960)/10),而k位的无符号整数是pow(2,k)-1,n!要小于等于pow(2,k)-1。直接进行求解容易溢出和超时,所以采用对数运算。n!c++代码如下:#include#includeusing namespace std;int main(){ int
2015-11-21 00:11:35 601
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人