摘要: 题意:对于第一个例子:4 6A<BA<CB<CC<DB<DA<B若在输出第k行后所有字母都有序则输出:Sorted sequence determined afterk relations: y...yyy.若在输出第k行后出现矛盾,则输出:Inconsistency found afterk relations.若在输出m行后,仍无法排好序,则输出:Sorted sequence cannot be determined.思路:用adj[30][30]来表示没两个字母之间的关系,adj[i][j]=0表示还没有确定i和j之间的关系,adj[i][j]=1表 阅读全文
posted @ 2011-04-07 14:23 奋斗青春 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 昨天晚上写好的代码,交了几次都是wa,但是没找到什么地方有错误。。刚才又找了组测试数据发现有问题,就又检查了下代码,发现一个地方写错了,该过之后就AC了,哇哈哈。。。思路就是先用最短路算法dijkstra算法,求出到达每一个key的最短时间,然后再讨论任意两个key之间的关系,判断最后会不会停留在两点之间,代码:# include<stdio.h># include<string.h># define PI 0xfffffffint main(){ int i,j,tt,ans1,ans2,n,m,t=0,map[505][505],visit[505],low[505 阅读全文
posted @ 2011-04-07 11:00 奋斗青春 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 这道题目并不难,只是用了一下递归,不过对于字符串处理,中间有很多的小细节都需要注意。。思路很简单,对于每一个白色的三角形先判断开口向上还是向下,然后选择不同的递归。。只需记录起点和终点,然后访问之间的点,代码:# include<stdio.h># include<string.h>char map[105][205];int count,n;void dfs1(int r,int from ,int to){ int i,ans; if(r>=n) return; ans=n-1-r;/*ans表示该行前面有多少空格*/ if(!(from>=ans &a 阅读全文
posted @ 2011-04-06 13:37 奋斗青春 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 这道题相对比较简单,只用了向量的叉乘。。题意就是给一个圆点,然后给出一系列的点,问以这个圆点为圆心、半径为r的所有半圆中,哪一个半圆能包含最多的点。。我的思路就是分别以每一个点作为一个边界,然后顺时针方向画一个半圆,看以这一点为边界时最多能包含多少点。。。代码:# include<stdio.h>struct node{ int x,y;}s[155];int dist(int x0,int y0,int x1,int y1){ return (x0 - x1)*(x0 - x1) + (y0 - y1)*(y0 - y1);}int main(){ int i,j,n,x0,y0 阅读全文
posted @ 2011-04-05 10:56 奋斗青春 阅读(244) 评论(0) 推荐(1) 编辑
摘要: 刚开始看这道题目的时候就感觉没有什么特别的方法,就把所有的都枚举一遍,算了算时间,字符串最长也就是78,相对来说比较小,感觉不会超时的,但是昨天写的时候感觉思路不是很清楚,就没再接着写,今天又顺着昨天的思路理了理,感觉还可以,就敲了一下,没想到实例都通过了,交了AC。。我的思路就是把所有的a~z出现的次数以及出现的位置都例举出来, 把他们的位置用坐标表示,第一行第一个数是(0,0),第二行从左到右为(-1,-sqrt(3)),(1,-sqrt(3));然后依次推出所有字母的坐标。。最后对于每个字符出现次数,任意枚举三个位置,看看这三点构成的是否是一个等边三角形。。。代码如下:# include 阅读全文
posted @ 2011-04-03 22:04 奋斗青春 阅读(260) 评论(0) 推荐(0) 编辑
摘要: 以前做这种题目会用O(n^2)的方法,就是a[i] = max(a[j])+1 (j<i && x[j]<x[i]);这道题目给的数据是n=40000,很明显这种方法要超时。。于是加了二分,对已经搜索的过的记录下来,从而节省了时间,看代码:View Code 1 # include<stdio.h> 2 int main() 3 { 4 int i,st,ed,L,n,a[40005],s[40005],t,mid; 5 scanf("%d",&t); 6 while(t--) 7 { 8 scanf("%d&quo 阅读全文
posted @ 2011-03-30 11:00 奋斗青春 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 今天起来的比较晚。。同学问我看没看过线段树,我说看过,她让我做做今天的一日一题--zoj1610线段树是去年暑假学的,快一年了,都没怎么看过,幸好前两天看了自己的一个模板,然后今天仍然记忆尤新。。11点多开始敲代码,中间改了又改, 最后终于在2点时候搞定了。。这个题目需要注意两点,由于是对线段进行的操作,所以需要访问到所有的线段,建树的时候需要注意一下,maketree(begin,tree[step].mid,2*step);maketree(tree[step].mid,end,2*step+1);以前都是对点进行操作的,然后下面那行就是maketree(tree[step].mid+1, 阅读全文
posted @ 2011-03-26 15:02 奋斗青春 阅读(471) 评论(0) 推荐(2) 编辑
摘要: 对于这两次的比赛感到很无语, 不知道是不是很久没比赛了,以至于忘了比赛时的那个节奏,哎。。。很早做出来一道题,然后一直都在研究一道题, 中间很想再换一道,但是想着 等把这个搞出来了再看下面的吧。。。。以至于到最后还是没有搞出来,其他题也没有看,。哎,找不到感觉了, 决定这两天不再学习新的算法, 把以前学过的算法看一下,先把这几场比赛给应付过去。。。今天被这个kmp给难住了,尽管有一本算法导论,但是尽然抄错了。。贴一个模板,以后自己再写kmp就全部按照这个写。。。。。View Code 1 # include<stdio.h> 2 # include<string.h> 阅读全文
posted @ 2011-03-24 22:20 奋斗青春 阅读(652) 评论(0) 推荐(0) 编辑
摘要: 计算几何的题很少做,感觉太难了。。不过这个分治感觉用处很多,所以就看了下,,,昨天晚上就写好了代码,只不过在hdu一直tle上, 直到刚刚,在zoj上过了,在hdu的还是tle。。对hdu很是失望,同是oj,差别怎么这样大呢。。。要不是发现zoj上也有相同的题目,不知道还要调试多长时间。。不过应该还有某个地方出问题了,要不然也不可能在hdu上一直不过。看出来的,给留个言,当万分感激。。题目的意思就是寻找最近点对,然后输出最近点对距离的一半!# include<stdio.h># include<math.h>#include<stdlib.h>#define 阅读全文
posted @ 2011-03-24 16:27 奋斗青春 阅读(897) 评论(1) 推荐(0) 编辑
摘要: 刚才准备去上课,一看时间,马上就打铃了,那就再t a o一节吧。。昨天的一日一题:题目不是很难,不过要考虑的全面,不然会一直wa,对0和9进行处理。贴代码:#include<stdio.h># include<string.h># include<stdlib.h>int cmp(const void *a, const void *b){ return *(char *) a - *(char *)b; }int main(){ int i,len,n,count1,count2,index; char str[1005]; scanf("%d& 阅读全文
posted @ 2011-03-24 10:38 奋斗青春 阅读(218) 评论(0) 推荐(0) 编辑