上一页 1 ··· 21 22 23 24 25 26 27 28 29 ··· 37 下一页
摘要: 解题报告:给你两个字符串,让你连接起来,没有前后顺序,要求是长度最短优先,其次是字典序最小。这题我用的是KMP,做两次匹配,分别把第一次跟第二次输入的字符串放前面,然后比较两次得到的字符窜的长度和字典序。 1 #include 2 #include 3 const int MAX = 200000+5; //因为如果两个加一起就有可能超出了,干脆开两倍的数组 4 int next[MAX]; 5 void get_next(const char *t) { 6 next[0] = -1; 7 int len = strlen(t); 8 int i = 0,j = -... 阅读全文
posted @ 2013-08-01 15:16 xiaxiaosheng 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 题目描述:先说明此题只有一个测试实例,然后输入一系列的单词,以一个回车为结束符,然后输入一个字符串,要你查找以这个字符串为前缀的单词的个数,处理到文件结束。解题报告:一开始看到这题,竟然直接用暴力去解了,根本没有想到用字典树,因为字典树是很久以前学的了,刚学的时候一个题都没做,所以现在都忘了,还好这题一次就写出来了,还没有调试,用字典树,要注意的是,一般字典树是在每个点标记有没有以这个点没结束的单词,但是这里要将每个节点标记的成经过这个节点的次数,因为可能有多个单词的前缀相同,这样就会多次经过这个点,如果只标记是否走过的话,就没有办法统计次数了。代码附上: 1 #include 2 #incl 阅读全文
posted @ 2013-07-31 10:41 xiaxiaosheng 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 解题报告:就是输入两个用逗号隔开的数字,求出这两个数字的和,并且用正常的方式输出来。直接写一个函数将一个包含逗号的数字转换成十进制的数返回就行了。这里推荐一个函数atoi(),参数是char*型的,然后返回的是一个int型的数,可以很方便的把字符串转化成整形数,包含的头文件是#include ,C++里面就是#include 1 #include 2 #include 3 #include 4 typedef __int64 INT; 5 int oper(char *s) { 6 char str[30]; 7 int k = 0,len = strlen(s); 8 ... 阅读全文
posted @ 2013-07-30 20:52 xiaxiaosheng 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 解题报告:其实就是一个转换进制的题,而且是10进制一下的,这就简单了,其他不多说,直接看代码: 1 #include 2 void jinzhi(__int64 m,__int64 C) { 3 if(C==0) 4 return ; 5 jinzhi(m,C/m); 6 printf("%I64d",C%m); 7 } 8 int main() { 9 __int64 m,A,B,C;10 while(scanf("%I64d",&m),m) {11 scanf("%I64d%I64d",&A,&B);12 阅读全文
posted @ 2013-07-30 20:47 xiaxiaosheng 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 题目大意:输入有一个T,表示有T组测试数据,然后输入三个字符串,问第三个字符串能否由第一个和第二个字符串拼接而来,拼接的规则是第一个和第二个字符串在新的字符串中的前后的相对的顺序不能改变,问第三个字符串能否由前两个得到。解题报告:这题用dfs,反过来,将第三个字符串按照从前到后的顺序,看能否拆成第一个和第二个字符串,不过这题如果只是这样搜索的话,很明显会超时,所以要减掉其中一些重复的其情况,定义一个二维数组hash[i][j],初始化都为0,然后如果将hash[i][j]标记为1表示第一个字符串比较到第i个位置并且第二个字符串比较到第j个位置的情况已经搜索过了,要剪掉。这样就不会超时了,原理应 阅读全文
posted @ 2013-07-30 20:43 xiaxiaosheng 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 题意描述:给出一个n,要求在所有满足n = a+b的a和b里面求a和b的最小公倍数最大的两个数的最小公倍数。解题报告:比赛的时候看到这个题的第一反应就是寻找这两个数一定是在a和b比较接近的地方找,这样才能保证a和b的最小公倍数最大,首先,奇数和偶数是一定要分开的讨论的,因为奇数和偶数的一半是不同的,奇数的一半可能就是所要的结果,但是偶数的一半可以确定一定不是所要的结果,因为偶数一半刚好a和b就相等了,最小公倍数就是他们本身了,这是最小的了,然后偶数里面又要分开讨论,一种是这个偶数的一半是奇数,另一种是这个偶数的一半也是偶数的情况,对于是奇数的,结果就是将一半分别进行加2减二得到,然后对于是偶数 阅读全文
posted @ 2013-07-30 20:33 xiaxiaosheng 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 题目描述:Ignatius,这个人过生日,然后请了很多朋友来聚会,然后并不是他的所有的朋友都互相认识,现在给出他的朋友们相互认识的情况,并且规定,如果1认识2,2认识3,则1认识3,要求每一伙认识的朋友坐在一张桌子上,然后要求一共需要多少张桌子。解题报告:此题我用的是并查集,也就是将每次输入的一对关... 阅读全文
posted @ 2013-07-30 20:20 xiaxiaosheng 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 题目描述:给出图,要你求是否存在最小生成树,如果存在,要求输出最小权值和,如果不存在,输出?解题报告:又是一个最裸的克鲁斯卡尔,并且要判断是否存在最小生成树的问题。废话不多说,给个短代码: 1 #include 2 #include 3 const int MAX = 100+5; 4 int N,... 阅读全文
posted @ 2013-07-30 20:08 xiaxiaosheng 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 题目描述:输入一个T,表示有T组测试数据,然后每组测试数据有一个C,表示在一个湖里面有C座岛屿,现在要在岛屿之间修建桥,可以修建必须满足的条件是岛与岛之间的距离在10到1000的范围内,然后给出每座岛屿的坐标,并且每米的修建桥的费用为100,求能把所有岛屿连接起来的所需要的最小费用,如果不能将所有的... 阅读全文
posted @ 2013-07-30 20:01 xiaxiaosheng 阅读(282) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给你一个m*n的矩阵,里面有两种符号,一种是@ 表示这个位置有油田,另一种是 * 表示这个位置没有油田,现在规定相邻的任意块油田只算一块油田,这里的相邻包括上下左右以及斜的的四个方向相邻的位置。要你求出一共有多少块油田。解题报告:用dfs,我的做法是首先在输入的时候将每个有油田的位置标记为1,否则标记为0,然后枚举每一个点,如果这个点有油田,则以这个点为起点,像周围的八个方向搜索,搜到了相邻的点就标记为2,当然这里也可以标记为0,只要是将已经搜过的点标记掉就是了,当dfs退出到main函数的时候,油田数量加一。 1 #include 2 #include 3 #include 4 # 阅读全文
posted @ 2013-07-28 20:37 xiaxiaosheng 阅读(218) 评论(0) 推荐(0) 编辑
上一页 1 ··· 21 22 23 24 25 26 27 28 29 ··· 37 下一页