06 2012 档案
摘要:题目链接这个题,错了10+,不过还是挺值得的,发现了两个我的Floyd模版的两个问题,一个是初始化的数必须绝对的大,然后就是在判断句的时候if(p[i][j] > p[i][k] + p[k][j] && p[i][k] != N && p[k][j] != N) 以前不注意不写后边的两个&&,做这个题,发现在数据很大的时候会出错。。。血的教训啊。。。以后写Floyd一定要注意。。。。和AC代码 一句一句的比对啊。。。。 1 #include <stdio.h> 2 #include <string.h> 3 #in
阅读全文
摘要:题目链接自己英语阅读能力下降了,还是题目描述的不清楚啊,太郁闷了,多组,用字符串,没了。。 1 #include <stdio.h> 2 #include <string.h> 3 char s[10010]={'\0'}; 4 int n,len; 5 int main() 6 { 7 while(scanf("%d\n",&n)!=EOF) 8 { 9 while(n--)10 {11 scanf("%s",s);12 len = strlen(s);13 if(strcmp("1...
阅读全文
摘要:题目链接赤裸裸的并查集,搞不懂为什么POJ计划里,会用分治做。。 1 #include <stdio.h> 2 #include <string.h> 3 #define N 50001 4 int o[N]; 5 int find(int x) 6 { 7 int r,t; 8 r = x; 9 while(x != o[x])10 x = o[x];11 while(r != x)12 {13 t = o[r];14 o[r] = x;15 r = t;16 }17 return...
阅读全文
摘要:题目链接首先这个题,我以为是DFS。。。交上各种TLE ,RE,暴栈和超时啊。。。找了一下题解,发现是图论问题。。。唉。又重新翻离散课本。。。定理:有向图的欧拉路连通且存在一个出度比入度大一的,存在一个入度比出度大一的,其他入度出度相等。有向图欧拉回路连通且入度出度都相等。交上WA,然后查错,总以为是 判断是否是联通的时候做错了,其实是 忘记判断也是欧拉回路了。。。悲剧。。。代码 好烂。#include <stdio.h>#include <string.h>#include <stdlib.h>int p[27][27],z,n,o[27],key[27]
阅读全文
摘要:题目链接神似白书上的“八连块”,UVA上难得的1Y。 1 #include <stdio.h> 2 #include <string.h> 3 char map[101][101]; 4 int key[101][101]; 5 int a[9]={0,0,1,-1,1,1,-1,-1}; 6 int b[9]={1,-1,0,0,1,-1,1,-1}; 7 int m,n; 8 void dfs(int x,int y) 9 {10 int i;11 key[x][y] = 1;12 for(i = 0;i <= 7;i ++)13 {14 i...
阅读全文
摘要:题目链接今天考物理直接掉人品了,基本上没有会做的。。。希望可以过吧。。。。题目大意:给出坐标1000个,求出能组成三角形最小的周长。这个题直接暴力 + 剪枝,自己想的几个小剪枝都没把他水过去,在解题报告的帮助下,终于水过去了。。。#include <stdio.h>#include <math.h>#include <string.h>#define N 1000000double x[1001],y[1001],mop[1001][1001];int main(){ int t,n,i,j,k,num = 0; double min,a,b,c,z,key
阅读全文
摘要:题目链接看错题了。。。。。导致WA 5 6次重改后(期间还打了次表发现表错了),先交了次,TLE,然后打表恶搞之。。。400+的表不长。。一下为打表的代码。应该有剪枝,唉,自己想不出来啊。。。 1 #include <stdio.h> 2 #include <string.h> 3 int p[41],z,n; 4 int mod(int x) 5 { 6 int i,mo = 0; 7 for(i = 1; i <= x; i ++) 8 { 9 mo = (mo*10 + p[i])%x;10 }11 if(mo)12 ...
阅读全文
摘要:不想说,自己没发挥好,更不能说自己超水平发挥了,只是感叹如果再多考一点,一切都都会不一样。 总是在结果出来之后,后悔当初没努力。 不过,现在的生活并没有那么差,找点感兴趣的事情去做,比在大学里虚度光阴强多了。 最后,希望今天出成绩的童鞋取得好成绩。 一份付出,一份收获,没有付出,凭什么去收获呢?
阅读全文
摘要:题目链接省赛前 最后一次队内比赛的题目,当时我读懂了题意,本来应该1Y的题目,开始忘加换行,导致以为算法错误还误导了队友。。。错了N次后,SCF童鞋勇猛的A了,当时比赛马上结束了,绝杀啊。。。再做1Y。。 1 #include <stdio.h> 2 #include <string.h> 3 int main() 4 { 5 int i,j,k,len,n,i1; 6 char p[2100]; 7 scanf("%d%*c",&n); 8 for(i = 1;i <= n;i ++) 9 scanf("%c%*c"
阅读全文
摘要:题目链接大一上的时候一次比赛的一个题,那个时候水平真是菜啊,拖到今天,用个函数水过了,纪念马上要结束的大一。。。#include <stdio.h>#include <string.h>#define N 200001char p[N],o[N];int main(){ int i,len; while(scanf("%s%s",p,o)!=EOF) { len = strlen(p); for(i = len;i <= 2*len-1;i ++) { p[i] = p[i-len]; } ...
阅读全文
摘要:题目链接自己的代码能力太弱了啊,这个题有应该有两个方法,一个是直接判将所能走的点,是否存在被杀的可能,另一个就是先将红方可以 控制的点都找出来,然后再判断。去年福州赛区的被板刷的题,我做了2-3天,错了10+,POJ,HDU上都交,开始的思路还清晰,后来瞎改的都不知道自己写的是什么了,今天那个有个群赛,我下了下决心,一定要BUG找出来,从网上找了代码,找数据,测了测也对啊,终于 在自己乱试的数据找到错误,一开始的思路是对的,只错了一点,结果越改,偏离的越多了,模拟题,一直是自己的短板,本来可以用2000B+解决的问题,我却写了6000B+,查错都非常困难。。。 在WA了后,一定要慎重修改,慎重
阅读全文
摘要:题目链接头一次做贪心这么给力。。。1Y,题意就是给俩字符串,如何把前一个变成后一个,4种操作,输出最短,且按 a d m c的优先级输出,分情况讨论下OK了。PS:本来以为是二维DP,一看1W,我慌乱了。。。 1 #include <stdio.h> 2 #include <string.h> 3 char p1[10001],p2[10001]; 4 int main() 5 { 6 int i,j,len1,len2; 7 while(scanf("%s%s",p1,p2)!=EOF) 8 { 9 len1 = strlen(p1);10 ...
阅读全文
摘要:题目链接和经典那个报数博弈差不多,在仔细的纸上写写前面的几种情况后,猜想出规律,1Y。PS:思考时间不算长,也不算短,中规中矩。0 - p - p+q - 2p +q - 2(p+q)..... 败 胜 败 胜 1 #include <stdio.h> 2 int main() 3 { 4 int n,p,q; 5 while(scanf("%d%d%d",&n,&p,&q)!=EOF) 6 { 7 if(n%(q+p)<= p &&n%(q+p) > 0) 8 printf("LOST\n"
阅读全文
摘要:题目链接这个题交了18次。。。做欧拉图的时候想起这个题,我在判是否是具有相同的根的时候判错了。。。这个题的注意方向就 连通(具有相同的根),并且不能存在合并的时候具有相同根的,这样意味着,就两条路了,然后再注意0 0的时候特殊数据(看DISCUSS)。 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #define N 100010 5 int p[N+1],z,o[N+1]; 6 int find(int x) 7 { 8 int r = x,t; 9 while(p[x
阅读全文
摘要:题目链接根据欧拉提出的定理,存在欧拉路的充要条件是连通,不存在奇数度数节点或者2个奇数节点。存在欧拉回路是连通,不存在奇数度数节点。并查集写的有点暴力,水过。还好1Y。 1 #include <stdio.h> 2 #include <string.h> 3 int o[1001],p[1001]; 4 int find(int x) 5 { 6 while (x != p[x]) 7 x = p[x]; 8 return x; 9 }10 void merge(int x,int y)11 {12 x = find(x);13 y = find(y)...
阅读全文
摘要:题目链接此题和UVA上一模一样,可是数据不一样,都很变态,UVA上是一定有小数点,而杭电上不一定,UVA上在结果为0时,输出“.”而杭电上输出0。注意这个就能AC。UVA上AC代码这里。 1 #include<stdio.h> 2 #include<string.h> 3 int k1[201],k2[201],o1[10]; 4 int main() 5 { 6 int a,b,c,i,j,num,e,d; 7 char p[10]; 8 while(scanf("%s%d",p,&num)!=EOF) 9 { 10 mem...
阅读全文
摘要:题目链接DFS在调了一会后搞了出来,发现不能输出重复的,我纠结啊,思前想后,想映射出来,效率高,可是实在想不出如何实现,存了数组吧,结果数据就是如此的水。。。0ms 1 #include <stdio.h> 2 #include <string.h> 3 int p[101],o[101],sum,n,z,num[501],k[501][101]; 4 void dfs(int x,int step,int s) 5 { 6 int i,j; 7 if(s == sum) 8 { 9 z ++;10 num[z] = step-1;11 ...
阅读全文
摘要:题目链接本来对弗洛伊德很没信心,1000个城市,还好,还是过了,最裸的有4000+ms,因为是无向图加了下优化,3000+ms,这个。。。。#include <stdio.h>#include <string.h>double p[1001][1001];int main(){ int i,j,k,n,m,sv,ev; while(scanf("%d",&n)!=EOF) { for(i = 1; i <= n; i ++) for(j = 1; j <= n; j ++) scanf("%lf",&p
阅读全文
摘要:题目链接裸的弗洛伊德,没想清楚判断是否是6度分离,WA了一次,还好仔细分析了代码+思考10多分钟后找到问题,2Y。。 1 #include <stdio.h> 2 #include <string.h> 3 #define N 1000000 4 int p[301][301]; 5 int main() 6 { 7 int sv,ev,i,j,k,n,m,z; 8 while(scanf("%d%d",&n,&m)!=EOF) 9 {10 for(i = 0; i <= n-1; i ++)11 for(j = 0; j &l
阅读全文
摘要:题目链接听QC说是裸弗洛伊德,我想都没想就打出来了,发现样例过不了,仔细看了看题,有一点变化。。。 1 #include <stdio.h> 2 #include <string.h> 3 #define N 1000000 4 int p[301][301]; 5 int main() 6 { 7 int sv,ev,w,i,j,k,n,m,t; 8 scanf("%d%d%d",&n,&m,&t); 9 for(i = 1;i <= n;i ++)10 for(j = 1;j <= n;j ++)11 {12
阅读全文
摘要:题目链接复习的好累啊,刷个题。。。题意简单给两个数,找中间有多少个斐波那契数,最大可能有100位。先预处理出来,大数比较,我用的方法比较搞,以前做UVA的时候想出的一种方法,先判断位数,然后位数相同时,用strcmp函数来判断,因为此函数,可以判断两个字符串的字典序大小,然后注意点找的时候小细节就OK了。。。难得的1Y,话说UVA那个高精度 我还没过啊,UVA上各种坑人啊,如果数据有前导0,此算法悲剧。。。 1 #include <stdio.h> 2 #include <string.h> 3 int p[601][201],num[601]; 4 char str[
阅读全文
摘要:题目链接枚举一下,就可以。。最近超时的次数太多都怕了。。。SB的忘了个换行PE一次。 1 #include <stdio.h> 2 #include <string.h> 3 int p[101][101],sum1[101],sum2[101],n; 4 int judge() 5 { 6 int i; 7 for(i = 1;i <= n;i ++) 8 { 9 if(sum1[i]%2 != 0)10 break;11 if(sum2[i]%2 != 0)12 break;13 }14 ...
阅读全文
摘要:题目链接以前练习赛中的一个题,当时没学图论,听学长说是弗洛伊德,最近学了,又重新看了一下,用的很不熟练啊。。。在WA了3 4次之后,没浮躁,很不容易。。。题目:给你有向图的最短路,判断是否存在,存在,可以留下的最小边数。思路:想的时间有点长,先弗洛伊德一遍,判断是图中是否存在最短路,若有则直接输出不存在,再判断图中是否存在是否有p[j][k] ==p[j][i] + p[i][k]的边,就是这里,重复计算了,WA4次,唉,开始的时候也考虑的重复计算的问题,天真的加了个break,还是不熟悉啊。。。终于发现问题后,加了个标记数组后,A了。 1 #include <stdio.h> 2
阅读全文
摘要:题目链接好久没刷DP了,很没状态啊。这个题,先是算法想错,以为是类似滑雪的那种记忆化DP,结果变出来,没有终止条件,死循环。。。后来换了算法O(n^3) 这个状态方程很容易就能看出来,主要是实现的问题。。。还真不好说,这个是怎么做的,就是一直找左右,直到没法更新为止吧。最郁闷的是傻的不知道10的9次方会爆int,写完后URAL给的错误看不太懂,以为是数组越界。。。。。最近1Y很困难啊。。。 1 #include <stdio.h> 2 #include <string.h> 3 #define N 10000000000 4 long long dp[111][511]
阅读全文
摘要:题目链接区域赛的水题。。。题意理解好了就OK了,模版题,还是调试了一会,自己对代码不太熟练啊。 1 #include <stdio.h> 2 #include <string.h> 3 #define N 1000000 4 int main() 5 { 6 int p[20][20],low[13],o[13],sea[13]; 7 int i,j,k,n,a,b,w,ev,min; 8 while(scanf("%d",&n)!=EOF) 9 {10 memset(o,0,sizeof(o));11 memset(sea,0,...
阅读全文
摘要:题目链接非常裸的最短路问题,昨天把Dijkstra的思想理解了下,发现和prim非常相似,都是用一个low数组记录到达每个点的最短距离,昨天WA了N次,发现数据中竟然有两个点的权值有的时候有好几个。。。杭电上这个题数据没有重边。今天看了一下弗洛伊德,代码真的是挺简单,思想不是很理解。。。先代码实现,然后慢慢体会他的DP思路。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #define N 100000 5 int p[111][111],o[101],low[101];
阅读全文
摘要:题目链接在von学长的讲解,各种资料,算法导论神马的,都观摩了一遍,外加这个博客和这个终于理解了。。。。Prim的算法开始的时候理解错了,以为一直找最短的,再找到下个点再找最短的,结果WA了多次。。。无奈书上的模版代码实在是看不懂,经过询问学长后,终于理解找最小边的时候,要从集合中找,而不是下个点。。。终于在理解算法之后YY了个O(n^3)的代码。。。发现书上说此算法的复杂度为O(n^2),而且书上的模版和我的很不一样。。。终于,在学长的指导下,明白书上的代码了。算法实现:用low[]来存已经在树上的节点,到每个节点的最短的值,如果没有边,就初始化为正无穷,从low[]找最小边,然后改变low
阅读全文
摘要:做最小生成树的时候,用kruskal做稠密图。。怎么都是超时,等等试一下Prim看看能不能过。。期间优化下并查集的部分,看的杭电上的文档,文档上讲的很好,讲了两种方式。 1.把小树合并到大树上去。 2.通过查找时,把树给压缩了。 看文档上讲的比较好。。。 关键代码: 1 int find(int x)//通过查找压缩路径 2 { 3 int i,r,j; 4 r = x; 5 while(r != o[r])//找到根 6 { 7 r = o[r]; 8 } 9 i = x;10 while (r != i)//把这条路...
阅读全文
摘要:题目链接裸最小生成树。 还好数据小,0ms。 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <math.h> 5 int o[101],num; 6 double sum; 7 struct edge 8 { 9 int sv,ev;10 double w;11 } p[10000];12 int cmp(const void *a,const void *b)13 {14 return (*(struct edge *)a).w>(*
阅读全文
摘要:题目链接真郁闷。。。模版题,由于自己SB错误,错了5 6 次。。。不过也有好处,加深对模版的理解了。。 kruskal 模版 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 int o[101],sum,num; 5 struct edge//图的结构体 6 { 7 int sv,ev,w;//起始边,终边,权值。 8 }; 9 struct edge p[10000];//必须开到大于(n*n-1)/2,否则必然RE。。。10 int comp(const void *a
阅读全文
摘要:题目链接裸BFS,不复杂。 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 int p[27][27],o[27],key[27]; 5 int main() 6 { 7 int i,j,len,end,start,a,z; 8 char str[1000]; 9 while(scanf("%s",str)!=EOF)10 {11 z = 0;12 memset(p,0,sizeof(p));13 memset(o,0,sizeo...
阅读全文
摘要:看到von学长的日志,好久没写总结了,我写写最近的心情。刚刚在北边的实验室有了一台电脑,还没怎么过几天,就要搬家了。最近我干了些什么呢?复习?还是做题了?我感觉两方面都不是很好,省赛结束后,自己真是意识到自己的差距,知识面还太窄,终于开始学了新的算法,BFS和DFS,没学的时候总是以为很难,很排斥,了解了之后,觉得也没有想象中的那么难啊.现在的课是真的很少了,虽然复习压力很大,要提高效率,利用好时间。明天就要考离散了,还是一门一门的接受挑战吧。。。 学长的日志中说到了风气问题,我觉得我是没资格说这个问题的,虽然心里有很多的想法,但是我还是忍住吧。或许内心里我就是个自私的人,别人我才不管呢,就.
阅读全文
摘要:题目链接题目好理解,汉语的。。。电视上也见过这样的智力游戏,以前看过书,提示是广搜,今天想了一下,思路还是挺清晰的,搜6种情况,如A B C三个杯子,A 到B,A到C,B到A,B到C,C到A,C到B。我实现的很麻烦啊,还好在各种调试,各种DEBUG之后,1Y。 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 int p[102][102],o1[10000],o2[10000],o3[10000]; 5 int main() 6 { 7 int i,j,s,n,m,star
阅读全文
摘要:题目链接数据中有空格。2Y。View Code 1 #include<stdio.h> 2 #include<string.h> 3 int p[1001][1001]; 4 int main() 5 { 6 int a,b,c,d; 7 char str1[1001],str2[1001]; 8 while(gets(str1)) 9 {10 gets(str2);11 c=strlen(str1);12 d=strlen(str2);13 for(a=0;a<=c;a++)14 ...
阅读全文
摘要:题目链接在POJ训练计划中构造法的一个题,题目还是挺有意思的,就是离散中真值表给构造出来,马上要考离散了,就当复习一下析取和合取。。。思路:先搜一下5个命题的真假(枚举),然后从后往前推,用了栈的思想,判断复合命题是否为真。开始以为栈中只能有两个元素,WA了一次,改改OK了。。 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 int p[7],o[200],z; 5 char str[5000]; 6 int find() 7 { 8 int i,j,k,l; 9 l =
阅读全文
摘要:题目链接又是边界。。。错了两次,从今天开始准备期末考试,明显挑战很大啊!#include <stdio.h>#include <string.h>int p[20][20],o1[300],o2[300];int main(){ int i,j,k,start,end,c0,r0; int num; int change1[9]= {1,1,-1,-1,2,2,-2,-2}; int change2[9]= {2,-2,2,-2,1,-1,1,-1}; char c1,r1,c2,r2; while(scanf("%c%c%*c%c%c%*c",&a
阅读全文
摘要:题目链接这个题,真郁闷啊!!!!昨天折腾了晚上写了个DFS。。。交了三次都超时,今天写BFS,折腾了一晚上 一个i打成start 我硬是没发现那里错了,这么大的错误,竟然过了很多数据,受不了啊。。。自己要认真认真认真啊!!!!!! 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 char p[31][31][31]; 5 int ll[100001],rr[100001],cc[100001]; 6 int endl,endr,endc,l,r,c; 7 int main(
阅读全文
摘要:题目链接再刷一个BFS。 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 char p[50][50]; 5 int k[50][50],o1[10000],o2[10000]; 6 int main() 7 { 8 int i,j,a,w,h,start,end; 9 int j1[5] = {1,-1,0,0},j2[5] = {0,0,1,-1};10 while(scanf("%d%d%*c",&w,&h)!=EOF)11 {12
阅读全文
摘要:题目链接好郁闷的半下午+一晚上。。做了个本应用BFS的题,我用DFS写了130+,结果怎么都是超时。。。烦了。。。。刷个UVA,挺简单的题,防止没完没了的WA,做的还是挺谨慎的,感觉用的做法比较麻烦不知能否用scanf输入,无所谓了,还好1A。 1 #include <stdio.h> 2 #include <string.h> 3 int main() 4 { 5 char p1[1000],p2[1000],o1[1000],o2[1000],k1[1000],k2[1000]; 6 int n,i,j,l1,l2,z,e; 7 scanf("%d%*c&
阅读全文