摘要: 朴素的并查集应用,读题表示很不爽。。。题目讲有至多26个村落,每个村落有多条到其他村落的路,求出连通这些村落的最小代价。代码如下:#include <stdio.h>#include <stdlib.h>struct E{ int x, y, dis;} e[10000];int set[30];int find( int x ){ return set[x]= x== set[x]? x: find( set[x] );}void merge( int a, int b ){ int x= find( a ), y= find( b ); set[x]= y;}int 阅读全文
posted @ 2011-07-21 09:52 沐阳 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 1098: 素MMTime Limit: 1 SecMemory Limit: 128 MBSubmit: 26Solved: 15[Submit][Status][Web Board]Description素数有很多神奇的性质,所以很美。我们知道一个日期将年、月、日按顺序连接在一起可以组成一个八位数,例如2011年3月6日可以写成20110306。我的某个MM的生日组成的数是一个素数。偶尔我叫她素MM,没人知道是啥意思,她自己也不知道。O(∩_∩)O哈哈~我心里可是真的美美的(⊙o⊙)哦! 嗯,什么?你的生日也是素数?你也想做“素MM”或者“素GG”?那好吧,不过我可是很小气的哦!只有你出. 阅读全文
posted @ 2011-07-20 20:11 沐阳 阅读(1033) 评论(0) 推荐(0) 编辑
摘要: 该题是要求判断出是否能通过约瑟夫环的数数方式将所有的点都数出来,结论很简单,就是判定总人数和跳跃人数是否互质,如果最大公约数是一的话,那么输出NO,否则输出YES。证明如下: 设在N个点的圈中,按每数M个标记一下,那么能够把所有的点遍历到即要满足在循环完一圈后,新的起点一定要在1-M中的任何一点出现一次,这个不难理解吧。那么问题就转化为能否遍历1-M中所有的点,依次如此进行下去,当发现不能满足小区间的要求时,那么其父层亦不能满足要求。那么每次起点的偏移量是否有规律呢?答案是有的,以初始的N和M为例,每次的偏移量是 N%M( 假设N> M反之交换位置 ),也即取余的一个过程,那么接下来的新 阅读全文
posted @ 2011-07-20 08:53 沐阳 阅读(1194) 评论(2) 推荐(0) 编辑
摘要: Fibonacci Time Limit: 1000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1210Accepted Submission(s): 539Problem Description2007年到来了。经过2006年一年的修炼,数学神童zouyu终于把0到100000000的Fibonacci数列(f[0]=0,f[1]=1;f[i] = f[i-1]+f[i-2](i>=2))的值全部给背了下来。接下来,CodeStar决定要考考他,于是每问他一个数 阅读全文
posted @ 2011-07-20 08:35 沐阳 阅读(400) 评论(0) 推荐(0) 编辑
摘要: Farm Irrigation Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 1574Accepted Submission(s): 704Problem DescriptionBenny has a spacious farm land to irrigate. The farm land is a rectangle, and is divided into a lot of samll squares. Water pipes are 阅读全文
posted @ 2011-07-19 17:00 沐阳 阅读(571) 评论(0) 推荐(0) 编辑
摘要: 该题给定一个容器的体积,以及N个物品,每个物品有其要求的最少空间以及实际所占的空间 。 要我们判断是否可以把所有的物品全部放在里面,当然如果能够放进去也是需要一定的顺序的。最好的放置方法就是每次将物品中所占空间与实际空间差值最大的首先放进去。 现在我们来证明这个差值排序的正确性: 先申明几个变量的符号: CUR_MAX_V 当前的最大体积 ; CUR_NULL_V 当前的空余的体积 ;T_MAX_V 当前物品的所需的体积 ; T_REAL_V 当前物品的实际体积现在假设有一个无限大的空间,保证能够将所有的物品放入,考虑到当前的体积与即将放入的物品有如下关系: ( CUR_MAX_V ) ( . 阅读全文
posted @ 2011-07-18 21:30 沐阳 阅读(322) 评论(0) 推荐(1) 编辑
摘要: 该题的难点在于如何去处理掉等号,这里要用到并查集来处理相同的点,不要在输入的时候处理数据,一定要先将数据全部读取完再处理,这是因为相等的点的出现是不可预见的,很可能不能把相等的点的信息全部加到一个点的邻接表上去。这里说明两条定理:*如果一次入队入度为零的点大于1则说明拓扑排序序列不唯一*如果排序的总个数小于给定的个数,则说明存在回路这两种情况就对应了不同的错误,前者则是信息不完全,后者则是冲突。当然信息不完全不能够说明它不冲突。代码如下:#include <stdio.h>#include <string.h>#include <stdlib.h>#defi 阅读全文
posted @ 2011-07-18 10:04 沐阳 阅读(341) 评论(0) 推荐(0) 编辑
摘要: 该题要求将小数通通化为分数,这个过程是一个纯数学运算,大概是小学的奥赛题吧。。哇哇。。。。如果是普通分数,好说,就是同乘以10^x次方的数,再约分就可以了。例如 0.234--> 234/1000 --> 117/500如果是纯循环小数,那么就要借助方程来解了。例如 0.(1234) 令x= 0.(1234), 对这个循环小数有 10000x- x= 1234, 解出来 x= 1234/9999, 在约分就行了 这里等于 1234/9999如果是这种情况呢 0.24(765) 可以很清楚的认识到,这是前两者的综合版,分开算再通分,约分...... 这里还是借助方程来解。例如 0.2 阅读全文
posted @ 2011-07-17 16:50 沐阳 阅读(462) 评论(0) 推荐(0) 编辑
摘要: 这题的拓扑排序有一个一定要处理的地方就是要将一次所能够pop出来的点在一次循环中全部取出来,然后再在基本工资的基础上自增一。代码如下:#include <stdio.h>#include <string.h>#include <stdlib.h>typedef struct a{ int sign; struct a *next;} E;struct b { int cnt; struct a *next;} V[10005];int queue[10005], front, rear, M, N, hash[10005];void insert( int 阅读全文
posted @ 2011-07-17 10:47 沐阳 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 该题理解为将每一个字母与两个模式串进行匹配,如果不符合则回溯进行匹配。一个例子: aaabb aaaaaacd aaaaaacaaabbd到组合串第四个字母时,'a' 不能够与A串匹配,于是以状态为A:aaa__, B: a_______,组合串匹配到第五个字母进行递归,......当匹配到组合串的第七个字母 'c'时,该字母与A串以及B串的第四个字母均不能匹配,这时必定将回溯到组合串第三个'a'的匹配过程中,并将第三个 'a' 分配给B串,而这时,A串又会和组合串中的第四个'a' 匹配,接下来,又将以A:aaa_ 阅读全文
posted @ 2011-07-17 10:41 沐阳 阅读(534) 评论(0) 推荐(0) 编辑