07 2011 档案

摘要:View Code 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 #define MAXN (3000 + 100) 6 7 int flag[MAXN], num[MAXN]; 8 9 void Fac(int n) {10 memset(flag, 0, sizeof(flag));11 memset(num, 0, sizeof(num));12 int i, j, k;13 __int64 f;14 int res = 0;15 for(i = 1; i &l 阅读全文
posted @ 2011-07-29 11:46 cloehui 阅读(552) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=1247题目大意:N个客人编号从1到N,每人可能点n个肉丸。S从1开始顺时针发丸子,E从N开始逆时针发丸子,如果他们能同时发完丸子,输出发完时的位置。否则输出No equal partitioning.思路:就是看能否找出一个位置,使得由此分出的桌面的两部分丸子数相等,看图很容易看明白提交情况: AC 1次AC code :View Code 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 #define MAX 阅读全文
posted @ 2011-07-26 10:08 cloehui 阅读(280) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=1046题目大意:颜色的(R,G,B)类似于三维坐标点,颜色的距离定义同空间点的距离。前16组数是目标颜色,从第17组开始,从目标颜色中找出与每个颜色距离最近的颜色,按照规定格式输出思路:水题,先把目标颜色存起来,后续的颜色每次输入一次就判读输出就可以了提交情况: AC 1次总结:这两天感觉算法学不懂,各种郁闷,于是找水题来做,找找安慰。似乎今年寒假的时候还觉得这个题有点麻烦,现在看完全就是水题。至少比寒假时有进步了,嗯。加油AC code :View Code 1 #include <stdio.h> 2 #include 阅读全文
posted @ 2011-07-25 16:48 cloehui 阅读(357) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=1183思路:知道要推导公式,根据公式(4)的两种形式推来推去,似乎没有太大结果。看了Discuss里大牛的推导,看懂之后就很简单了,关键就是b = a+m, c = a+n .借用大牛的推导……1/a = (1/b + 1/c)/ (1 - 1/(b*c)) => bc-1 = a(b+c) assume b=a+m and c=a+n (b and c is always bigger than a) (a+m)(a+n)-1=a(a+m+a+n) => a*a+a*n+a*m+m*n-1=2*a*a+m*a+n*a = 阅读全文
posted @ 2011-07-24 17:14 cloehui 阅读(338) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=3981思路:搜索到"you"就替换成"we", 否则原样复制提交情况:AC 1次AC code:View Code 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #define MAXN (1000 + 20) 5 6 char s[MAXN], e[MAXN]; 7 8 void Replace() { 9 char ch[5];10 int i, j = 0;11 in 阅读全文
posted @ 2011-07-24 15:10 cloehui 阅读(332) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=2864题目大意:有N个男毕业生,举行了D次晚会,D行N列的矩阵,0表示Ni没有参加这次晚会,1表示参加了。判断有没有人参加了所有晚会思路:开一个N数组标记男毕业生的参加情况,初始化都为1,如果输入时发现某一次为0,说明未参加,则N[i]标记为0。输入结束后扫描N数组,如果有N[i]仍然为1,说明有人参加了全部的晚会,输出yes,否则输出no提交情况: AC 1次总结:觉得这么做似乎还有点麻烦,不够简洁……AC code :View Code 1 #include <stdio.h> 2 #include <stdli 阅读全文
posted @ 2011-07-24 14:13 cloehui 阅读(271) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=1067题目大意:中文题不解释……思路:威佐夫博奕,其实不大懂……附一个链接http://www.docin.com/p-804326.html 就是ak,bk满足ak =(sqrt(5) + 1) / 2下取整,bk = ak+k ,那么你所面对的就是奇异局势,必败,输出0,否则你必胜,输出1。提交情况: WA n次, TLE 2次, AC 1次总结:拖了好久的题,定理的证明实在太纠结了。先开始脑残的暴搜k,后来才想到不用管k是多少,可以把k消掉,ak、bk之间满足关系就好。ak要下取整,否则会WA 只是想把拖了很久的题过掉……博弈的 阅读全文
posted @ 2011-07-24 11:31 cloehui 阅读(633) 评论(0) 推荐(0)
摘要:题目:http://acm.hdu.edu.cn/showproblem.php?pid=3400题目大意:给出A、B、C、D四点坐标,在AB上速度为P,CD上速度为Q, 其他地方速度为R。求从A到D的最短时间思路:两个三分嵌套,AB线段三分,内层嵌套CD线段内的三分提交情况: WA 1次, AC 1次总结:内层的三分时,每次都要重新赋两端点的值为C、D的值,因为前一次搜索结束后,端点值已经改变。就这样WA了一次……AC code:View Code 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <st 阅读全文
posted @ 2011-07-24 10:34 cloehui 阅读(379) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=1002题目大意:手机键盘上字母和数字是对应的,给出几串号码,按照首位数字升序输出标准格式的有重复的号码,并输出重复次数;若无重复输出一行 思路:把输入的字符转化成7位数字,从小到大排序,找重复的数字,记录出现次数。具体看注释提交情况:WA 3次, TLE 4次, AC 1次总结:一直TLE,将n²的搜索改了之后变成WA,似乎还有 No duplicates. 貌似也有最后那个小句号的问题…… 之后又一次TLE , 是将字符串转换成数字的时候用了pow()。改了之后就AC了。字符串操作各种不熟练,每次换行符什么的搞得相当纠结。 阅读全文
posted @ 2011-07-24 01:26 cloehui 阅读(561) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=1007题目大意:给出一段DNA序列,按照有序程度降低的顺序输出,也就是以逆序对数增加的顺序输出思路:记录A、C、G、T出现的次数,每输入一个字符,它出现的个数加1;如果输入A,逆序数加上已出现的C、G、T个数,输入C,逆序数加上已出现的G、T个数,输入G,逆序数加上已出现的T个数,输入T,逆序数不增加。这样当字符串输入结束,这个串的逆序数也已经求出了。按照逆序数从小到大重排字符串,再输出,就可以了。提交情况: AC 1次总结:做的也是比较纠结。拖了很久的一道题,今天一定是脑残了才想做这个。一直对字符串处理比较头痛,吸收换行符什么的,各 阅读全文
posted @ 2011-07-24 00:01 cloehui 阅读(765) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=2253题目大意:找到从点1到点2的某一条路中最长边,使最长的这条边尽量短算法:Kruscal思路:搜了题解……找最小生成树,加入某条边后点1和点2联通了,那么这条边就是所求边提交状况:OLE 1次, WA n次, AC 1次总结:从昨天上午纠结到今天中午……就是懒得建图……并查集也有问题,先是细节,再是路径压缩不对。我WA了一上午的题啊,同学过来不到两分钟就发现错误了……我掩面逃走……AC code :View Code 1 #include <stdio.h> 2 #include <stdlib.h> 3 阅读全文
posted @ 2011-07-23 13:49 cloehui 阅读(200) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=2387题目大意:找出从1到n的最短路算法:Dijkstra思路:很裸的Dijkstra,主要是想练习用邻接表建图提交情况:WA 3次, RE 3次, AC 1次总结:很裸的Dijkstra,主要是想练习用邻接表建图。AC的很纠结,先是懒没有判重,后来发现是无向图,改完就开始RE,开了2100的边集,一直RE,开到20100才AC。题目明明写的T <= 2000 啊,为什么就不够呢……AC code:View Code 1 #include <stdio.h> 2 #include <stdlib.h> 3 阅读全文
posted @ 2011-07-22 11:11 cloehui 阅读(241) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=2299题目大意:给出一串数字,求出逆序对的数目思路:用归并排序提交情况:AC 1次总结:拖了好久的题,终于做了。先开始对归并排序思路还是不理解,经过同学讲终于明白了。写题之前一定要仔细将原理想清楚啊。AC code:View Code 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #define MAXN (500000 + 100) 5 #define I64 __int64 6 7 I64 num[MAXN] 阅读全文
posted @ 2011-07-22 08:23 cloehui 阅读(271) 评论(0) 推荐(0)
摘要:题目:http://acm.hdu.edu.cn/showproblem.php?pid=2108题目大意:给出点数n, 逆时针顺序给出n个点的坐标,都为整数,判断所围多边形是凸的还是凹的。思路:按照逆时针顺序连出向量p0p1,p1p2,p3p4……若是凸多边形,那么b相对于a一定是向逆时针方向旋转的,判断两向量的旋转方向,可以使用向量的叉积a×b= x1×y2- x2×y1。自己想了好久不会,看了别人的题解,发现思路还是很清晰的……提交情况:AC 1次AC code :View Code 1 #include <stdio.h> 2 3 #inclu 阅读全文
posted @ 2011-07-20 16:32 cloehui 阅读(324) 评论(0) 推荐(0)
摘要:题目:http://acm.hdu.edu.cn/showproblem.php?pid=3857题目很长,都是废话,就是找数组下表和值相同的数值。提交情况:WA n次, AC 1次总结:水题啊!大水题!突然想用'\b'退格键来处理最后一个数的格式,结果一直WA。因为输出了答案中不存在的字符,所以会WA。最后终于放弃退格,安分的分情况处理格式了。AC code:View Code 1 #include <stdio.h> 2 3 4 5 #define MAXN (10000 + 100) 6 7 8 9 int num[MAXN];10 11 12 13 void 阅读全文
posted @ 2011-07-20 16:31 cloehui 阅读(234) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=3259题目大意:有F个fields,N条正常的路径,W个虫洞,走正常路径耗时,走虫洞减时。要从原点走一条回路,满足再回到原点时所用时间和小于0思路:Bellman-Ford判断从源点可达的负权回路算法:Bellman-Ford提交情况:WA n次, AC 1次总结:正常路径是双向的,虫洞是单向的。所以最多一共有(2 * M + W)条路,先开始数据开小了。AC code :View Code 1 #include <cstdio> 2 3 #include <cstring> 4 5 #include < 阅读全文
posted @ 2011-07-20 16:30 cloehui 阅读(295) 评论(0) 推荐(0)
摘要:View Code 1 #include <cstdio> 2 3 #include <cstdlib> 4 5 #include <cstring> 6 7 8 9 #define MAXN (100000 + 100) 10 11 #define I64 __int64 12 13 14 15 int a[MAXN], f[MAXN]; 16 17 I64 head, tail; 18 19 I64 nowh, nowt; 20 21 I64 res; 22 23 24 25 void Clear() { 26 27 memset(a, 0, sizeo 阅读全文
posted @ 2011-07-20 16:30 cloehui 阅读(173) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=1861题目大意:要用最短的电缆把所有的电脑都连接起来。算法:Kruscal+并查集思路:常规Kruscal+并查集。先开始没注意到是SPJ,看样例输出一个环很是疑惑,纠结了半天,看了discuss,才知道是样例的问题……不用管样例,常规做就好提交情况:1次ACAC code:View Code 1 #include <cstdio> 2 3 #include <cstdlib> 4 5 #include <cstring> 6 7 #include <algorithm> 8 9 usi 阅读全文
posted @ 2011-07-20 16:29 cloehui 阅读(307) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=2395题目大意:找到连接所有农场的最小生成树,并找到其中最长的一条路。算法:Kruskal+并查集提交情况:1次AC思路:很裸的Kruskal+并查集,连边数都给出来了。建立边集,常规Kruskal+并查集,记录当前最小生成树中最大边。AC codeView Code 1 #include<stdio.h> 2 3 #include<stdlib.h> 4 5 #include<string.h> 6 7 #include<algorithm> 8 9 using namespace s 阅读全文
posted @ 2011-07-20 16:27 cloehui 阅读(296) 评论(0) 推荐(0)
摘要:题目:http://acm.hdu.edu.cn/showproblem.php?pid=1061题目大意:求n^n的最右位。提交情况:n次WA。总结:记得每次都要取模,否则会溢出。特殊当 n== 0,输出1。思路:快速幂求n^n,每运算一次要模10。AC code:View Code 1 #include <cstdio> 2 3 #include <cstdlib> 4 5 #define I64 __int64 6 7 8 9 int Fuction(I64 n) {10 11 int res = 1;12 13 I64 b = n;14 15 if(!n) // 阅读全文
posted @ 2011-07-20 16:26 cloehui 阅读(295) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=1258题目大意:多组测试用例,找出连接所有农场的最短路径。算法:最小生成树 + 并查集。提交情况:1次WA,1次RE,1次AC。总结:没注意到多组用例;边集一定要开够。思路:建立无向图,用上三角矩阵表示,并查集 + Kruskal建最小生成树,记录总长度。AC code:View Code 1 #include <stdio.h> 2 3 #include <stdlib.h> 4 5 #include <string.h> 6 7 #include <algorithm> 8 9 us 阅读全文
posted @ 2011-07-20 16:25 cloehui 阅读(277) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=2485题目大意:输入各城镇之间的距离,求最小生成树中最长的边。算法:最小生成树。提交情况:3次RE,1次AC总结:边集一定要开大。思路:建立无向图,用上三角矩阵表示,并查集 + Kruskal建最小生成树,记录树中最长边。AC code:View Code 1 #include <stdio.h> 2 3 #include <stdlib.h> 4 5 #include <string.h> 6 7 #include <algorithm> 8 9 using namespace std 阅读全文
posted @ 2011-07-20 16:23 cloehui 阅读(235) 评论(0) 推荐(0)
摘要:题目:http://acm.hdu.edu.cn/showproblem.php?pid=3853题目大意:二维地图,分成r*c的方格,从左上角走到右下角,在每个格内有一定的概率停在原地,右移一格,下移一格,三种情况概率和为1。每次移动(包括停在原地)耗费两点魔法值。求从起点到终点所耗魔法值的期望。算法:dp思路:期望公式 E = x1 * p1 + x2 *p2 + …… +xn * pn 假设每格内停在原地概率为map[i][j].x,右移一格概率为map[i][j].y,下移一格概率为map[i][j].z;exp[i][j] 为从起点走到ij格所耗魔法值的期望。 同时可以得知exp[r 阅读全文
posted @ 2011-07-20 15:58 cloehui 阅读(258) 评论(0) 推荐(0)
摘要:题目:http://acm.hdu.edu.cn/showproblem.php?pid=1201一道水题,简单的判断闰年就好了。思路 : 17年的全年天数,加上第1年生日后的天数和第18年生日前的天数,就是到达18岁所需天数。如果18岁那年是平年,而且是2月29日的生日,就没有18岁生日,输出-1。AC code:View Code 1 #include <stdio.h> 2 #include <stdlib.h> 3 int year, month, day; 4 int year1, year18, day1, day2, days; 5 int S_Day(i 阅读全文
posted @ 2011-07-20 13:14 cloehui 阅读(539) 评论(0) 推荐(0)
摘要:题目:http://acm.hdu.edu.cn/showproblem.php?pid=1241题目大意:简单的dfs~ 搜索地图,每找到一个油田,就搜索八个方向,将连着的油田标记为同一个。算法:dfsAC code:View Code 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #define MAXN (100 + 10) 5 char map[MAXN][MAXN]; 6 int oil; 7 int m, n; 8 9 int dx[8] = {-1,-1,- 阅读全文
posted @ 2011-07-20 13:12 cloehui 阅读(307) 评论(0) 推荐(0)
摘要:题目:http://acm.hdu.edu.cn/showproblem.php?pid=2047开心~~第一次完全自己做出来的递推~~虽然想的过程有些纠结,但是规律毕竟是找出来了。思路:f[i]表示长度为i时的方案数, o[i]表示长度为i时所有方案中末位字母是o的个数.1)当长度n = 1时,有三种涂法 : E、 O、 F. f[1] = 1.其中O的个数为1, o[1] = 1.2)当长度n = 2时,E、 F分别又对应出3种情况(E、O、F), O对应出两种情况(E、F),因为不能有OO出现.末位O的个数o[2] = 2.f[2] = 3 * f[1] - 1 = 3 * f[1] - 阅读全文
posted @ 2011-07-20 13:10 cloehui 阅读(458) 评论(0) 推荐(0)
摘要:题目:http://acm.hdu.edu.cn/showproblem.php?pid=2046知道应该用递归递推来做,但是一直找不到规律……拖了好久,终于决定今天做完。苦思无果搜题解,发现代码只有几行…… 递推递归果然神奇啊!!!思路:f(1)=1,f(2)=2,f(3)=5,当有n个方格的时候,有两种铺法: 1)先铺好n-1个格,有f(n-1)个方法,再铺第n层的时候只有一种方法,所以总方法是1*f(n-1); 2)先铺好n-2格,有f(n-2)个方法,再铺后面两层的时候只能两个都横着铺(否则与第一种情况重复),所以也只有一种情况,总方法数是1*f(n-2)再没有其他情况了。 推出f(n 阅读全文
posted @ 2011-07-20 13:07 cloehui 阅读(602) 评论(0) 推荐(0)
摘要:题目:http://acm.hdu.edu.cn/showproblem.php?pid=1089 一共八道题目,题目都不难, 就是为了练习输入输出,题目之间的联系也很多,稍微改动一点点就可以了。题目都看的懂,我就不多说了哈…… 贴代码…… 注意随后一题要求 每个输出“之间”有空行,最后一行的后面没有空行AC code:View Code 1 // A + B (1) 2 3 4 5 #include <stdio.h> 6 #include <stdlib.h> 7 int main () { 8 int a, b; 9 while (~scanf ("%d 阅读全文
posted @ 2011-07-20 11:18 cloehui 阅读(540) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=1664自己想了半天,什么排列组合之类的,后来去搜题解,才知道是用递归…… 强大啊……个人感觉递归好神奇啊,反正就是一次一次调用然后结果就出来了,不用去想它具体是怎么实现的。 这题的思想是找递归关系,我们不妨令f(m,n)表示m个苹果放到n个盘子里有多少种放法,下面对不同的情况给予讨论:(1):当盘子数为1的时候,只有一种放法就是把所有苹果放到一个盘子里。(2):当苹果数为1的时候,也只有一种放法,注意题目中说明,盘子之间并无顺序,所以不管这个苹果放在哪个盘子里,结果都算一个。(3):当m<n时,因为此时最多只能放到m个盘子中去( 阅读全文
posted @ 2011-07-20 11:10 cloehui 阅读(812) 评论(0) 推荐(1)
摘要:题目:http://poj.org/problem?id=1163动态规划入门题~~ 在很长一段时间内,我的dp水平都停留在只会写数塔……选择一条路径从底加到顶,对每一个点num[i][j]来说,都可以从num[i+1][j] 和 num[i+1][j+1]中选一个加上来。如果每一次都加其中大的,并更新当前值,那么一直加到顶部,那个数必然是最大的。我的理解就是,每步都取最优解,所以最后的解也是最优的。AC code: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #define MAX 100 + 10 4 int main 阅读全文
posted @ 2011-07-20 11:03 cloehui 阅读(301) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=1269题目大意:给出四个点确定两条直线。如果是一条线输出“LINE”,如果平行输出“NONE”, 如果有交点输出交点坐标。思路:注意是直线,不是线段啊。用两点式推出两条直线方程 : (y1 - y2)x + (x2 - x1)y = x2y1 - x1y2; (y3 - y4)x + (x4 - x3)y = x4y3 - x3y4; 又由Cramer法则: a1x + b1y = c1; a2x + b2y = c2; D = a1b2 - a2b1; D1 = c1b2 - c2b1; D2 = a1c2 - a2c1; D != 阅读全文
posted @ 2011-07-20 11:01 cloehui 阅读(449) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=2231个人认为这是一道水题……先输入N表示有N头牛,接下来的N个数是各个牛所在的位置。如果一头牛对另一头牛Moo,那么Moo数就是1号牛所在位置i与2号牛所在位置j的差值,又因为1号牛Moo过去,所以2号牛也要Moo回来,于是Moo数就变为2倍了。1号牛要对剩余所有(N-1)头牛都Moo,如果我们将牛按顺序排好,每头牛i只对它身后的(N-i)头牛Moo,意思是,我们只考虑某头牛Moo出去的,而不考虑别的牛对它Moo回来的,那么它也不对在它前面的牛Moo,那么这就是一个简单的数学问题,每头牛i只对身后的(N-i)头牛Moo。因为所有牛还 阅读全文
posted @ 2011-07-20 10:57 cloehui 阅读(263) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=1088据说是一道很经典的dp入门题我的做法是用一个二维数组储存原始数据,然后对每个点调用一个递归函数,寻找周围四个方向的最长路径,加1作为这个点的最长路径。递归的方法是,对周围的四个点,如果点在地图内且高度下降,再找这个点的四个方向上的点,于是当达到边界或是某点已经被计算过,递归结束,返回最长路径值。所以这里还用到了记忆化搜索,对于每个点,都要记录这个点的最长路径值,这样就避免重复计算,是一种用空间换时间的做法。 对地图中的每个点都要调用子函数递归计算该点可以达到的路径最大值。然后比较出一个最大的作为该地图的最长路径。 要注意地图边界 阅读全文
posted @ 2011-07-20 10:51 cloehui 阅读(876) 评论(0) 推荐(0)