上一页 1 2 3 4 5 6 7 8 9 10 ··· 12 下一页
摘要: 看到这道题数据量不大,总共10000个字符串,每个长度小于50,就想到sort,才方便找两个字符串公共前缀最长。一开始WA了,忘记了如果想要想最少的话,必须满足最后再输入长度最长的!View Code5aaaabbbabaaaabdabcddef38 阅读全文
posted @ 2013-02-11 02:08 _sunshine 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 题意:给两个字符串s1和s2,求一个字符串s,使得s1既是s的子串,s2也是s的子串。kmp1:包含情况,s1是s2的子串 或者 s2是s1的子串kmp2:有公共的前缀和后缀(必须一个是前缀,一个是后缀) 即 resita 和 mures 的公共部分是3,aza 和 zaz 的公共部分是2(后台数据水了,有的代码这组样例输出2也A了)kmp2的前提就是没有包含关系了,那么其前缀是公共部分的字符串就是模式串了,保证一直匹配到s2的最后,都不会达到i==strlen(s1),因为不存在包含关系。所以达到j==strlen(s2)的时候就是匹配的最大公共部分了~这道题与2594很像~View Cod 阅读全文
posted @ 2013-02-11 01:08 _sunshine 阅读(306) 评论(0) 推荐(0) 编辑
摘要: 题意:求前缀个数和,前缀是字符串的所有前缀。eg:1 4 ababa:2个 ab:2个 aba:1个 abab:1个 共6个思路:字符串: a b a bnext[i]:0 0 1 2字符串: a b c a b a b c a b c a b c a bnext[i]:0 0 0 1 2 1 2 3 4 5 3 4 5 3 4 5 -1,i=0;next[i]={ Max{k|0<k<i,其中 ‘0~k-1’ 与 ‘i-k+1~i-1’ 相匹配}; 0,其他;所以要想求长度为j前缀有多少个,只需要看next[i]=j的有多少个就可以了,但是例... 阅读全文
posted @ 2013-02-09 03:41 _sunshine 阅读(327) 评论(0) 推荐(0) 编辑
摘要: 很明显是逆向的并查集,建立边再销毁,思路也很巧妙的逆向思考~如果正着一一销毁,相当于倒着一一建边。所以保存Q次提问,最后倒着来一一建边。在此之前先把没有销毁的边全部建好~细节power能量注意一下~View Code 1 #include <map> 2 #include <stdio.h> 3 #include <string.h> 4 #include <vector> 5 #include <iostream> 6 using namespace std; 7 8 const int N=50005; 9 int n,m,i,j 阅读全文
posted @ 2013-02-07 03:53 _sunshine 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 比预选赛那道简单很多。给出衣服,裤子,鞋子的件数。有一些衣服和裤子不能搭配,一些裤子和鞋子不能搭配。求共有多少种方式搭配一身(衣服+裤子+鞋)。n*m*k - ∑不能与衣服搭配的裤子 - ∑不能与鞋子搭配的裤子 + ∑ 该件裤子既不能与衣服搭配又不能与鞋子搭配View Code 1 #include <stdio.h> 2 #include <string.h> 3 #define N 1010 4 int f[N][2]; 5 int main(){ 6 char s1[10],s2[10]; 7 int n,m,k,p,a,b; 8 while(scanf(&quo 阅读全文
posted @ 2013-02-06 02:44 _sunshine 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 题意:有一个元素为 1~n 的数列{An},有2种操作(1000次):1、求某段区间 [a,b] 中与 p 互质的数的和。2、将数列中某个位置元素的值改变。思路:acm数学方面实在很差~学习ing~看解题报告A的容斥定理,看《组合数学》时看到过,但是从来没用过,求第x个数到第y个数中与p互素的数的和... 阅读全文
posted @ 2013-02-06 02:02 _sunshine 阅读(297) 评论(0) 推荐(0) 编辑
摘要: 题意:求出以n为最小公倍数的不同正整数对(u,v)的个数。(1 ≤n≤ 1012)注:对于u≠v,数对(u,v)与(v,u)被视为不同的。思路:n=p1^a1 * p2^a2 * p3^a3 * ……其中p1,p2,p3……是n的素因子,a1是p1的指数。欲使(u,v)的最小公倍数是n,那么 u=p1^b1 * p2^b2 * p3^b3 * …… v=p1^c1 * p2^c2 * p3^c3 * ……其中满足(bi=ai&&ci<=ai)或者(ci=ai&&bi<=ai)。如果u=v且最小公倍数等于n,那么一定是u=v=n。由于对于u≠v,数对( 阅读全文
posted @ 2013-02-05 02:59 _sunshine 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 题目:http://poj.org/problem?id=3013题意:给出n个点,m个边。给出每个点的权值,每个边的权值。求建立一棵树,root=1,求这棵树的最小费用,费用=树上每条边*子树中各顶点的权值。思路:root的权值是没用的,而其余节点是必须用的,每条边*子树中各定点的权值=各个点*点到根的最短路,于是转化成了root到各个点的最短路。610ms~View Code 1 #include <queue> 2 #include <stdio.h> 3 #include <iostream> 4 using namespace std; 5 con 阅读全文
posted @ 2013-02-02 23:35 _sunshine 阅读(989) 评论(0) 推荐(0) 编辑
摘要: hdu2489求一个图中的一颗子树,使得Sum(edge weight)/Sum(point weight)最小~数据量很小,暴力枚举,只是要注意精度,否则WA~dfs暴力枚举C(M,N)种情况。枚举出这M个点之后,Sum(point weight)固定,进行prime或者Kruskal使Sum(edge weight)求最小。View Code 1 #include 2 #include 3 #include 4 const int N=20; 5 const int inf=10000000; 6 int w[N];//用于记录每个点的权值 7 int ans[N];//用于记录答... 阅读全文
posted @ 2013-01-22 02:12 _sunshine 阅读(974) 评论(0) 推荐(0) 编辑
摘要: 感觉题意很扭曲。。。 不是求最大生成树!给一个图,求pseudoforest伪森林,要求每个连通分量最多可以有一个环。求能构成的最大值。 错误写法,求出最大生成树+最大的边 正确写法:在求最大生成树的思路的基础上每次判断一下环的问题~6 70 1 90 2 61 2 83 4 54 5 53 5 42 4 1这组数据如果是错误的方法就是34,选择(0,1),(1,2),(0,2),(2,4),(3,4),(4,5)正确的方法答案是37,选择(0,1),(1,2),(0,2),(3,4),(3,5),(4,5)View Code 1 #include <stdio.h> 2 #inc 阅读全文
posted @ 2013-01-22 02:05 _sunshine 阅读(457) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 10 ··· 12 下一页