摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1018这个题目好像还是在11年暑假看的呢,一直想用那个大整数乘法把N!求出,然后再用一个strlen函数求出位数,可是一直比较懒,都不愿意写,今天看书的时候,发现书上的讲解太牛了,虽然我不是很懂,还是拿来和大家分享一下吧。思路1. 这道题可以采用蛮力法,根据定义,直接求解。所谓N!位数,就是lg(N!)+1(不是很懂),根据数学公式: N ! = 1*2*3……N <==> lg(N!)=lg(2)+lg(3)+……+lg(n);所以呢 代码如下 1 #include<stdio.h> 阅读全文
posted @ 2012-03-05 21:44 AC_Girl 阅读(160) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2513题目的意思是说给一些木棒,每个木棒的头尾是不同的颜色,如果两个木棒首尾颜色相同就可以相接,问是否可以让所有的木棒都连起来。我是用的并查集和trie树和欧拉回路来判断的。建立trie树的过程中捎带合并集合,用并查集判断是否只有一个环,如果不是,则直接输出“Imb“然后再根据欧拉回路的条件判断,欧拉回路的条件:度为奇数的点的个数不能超过两个。 1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 using namespace s 阅读全文
posted @ 2012-03-05 20:45 AC_Girl 阅读(185) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2418虽然给的训练题目是说trie树类的题目,我是按字符串处理来做的。题目的意思:先给出一下树木,然后统计这些树木的出现频率输出的时候是按字典序输出的,保留4位小数 1 #include<stdio.h> 2 #include<algorithm> 3 #include<string.h> 4 #include<iostream> 5 using namespace std; 6 #define N 1000001 7 struct node 8 { 9 char str[40];10 }a[ 阅读全文
posted @ 2012-03-05 20:24 AC_Girl 阅读(170) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3080 题目就是让找一个公共的最长子串(连续的)一看就想起了用KMP算法,但是本来就不太懂,更别说用了,还是搜了一下解题报告,套用了KMP的模板 1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 using namespace std; 5 #define N 200 6 char str[20][N]; 7 8 9 /*套用的KMP的模板,在模板串里求子串*/10 int kmp(char s[],char t[])11 {1 阅读全文
posted @ 2012-03-05 20:17 AC_Girl 阅读(160) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1035题目很简单,就是给一连串的字符串作为标准字符串,然后是输入以些变动的字符串,这个变动的字符串是这样定义的:1.可能是随意的删掉了一个字符2.可能是随意的加上了一个字符3.与标准字符串相比,随意的替换掉了一个字符。由于上面的定义都是说的一个,所以题目也就很简单了,只要罗列三种情况就可以,len1(母串)和len2(子串),1.len1==len2, 2. len1-len2==1 3. len2-len1==1;虽然这样说简单,但是我写的时候也不觉得简单,主要是我对处理字符串不会,老是少考虑情况。好像写的代码也很复杂 1 #inclu. 阅读全文
posted @ 2012-03-05 20:11 AC_Girl 阅读(185) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3278题目输入n和m,n代表人的位置,m代表牛的位置,牛是不动的,而人动的规则是可以前进一步,后退一步,也可以直接在现在的位置上乘2(乘2算是一步),问你进过多少步可以最快的把牛抓到。直接用bfs,调用库函数的队列就可以了 1 #include<stdio.h> 2 #include<iostream> 3 #include<string.h> 4 #include<queue> 5 #define N 500000 6 using namespace std; 7 int move[2]={ 阅读全文
posted @ 2012-03-05 20:00 AC_Girl 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 就是一个递推的题目,但是由于数据比较大,所以用到了大整数。递推方程F(n)=F(n-1)+2*F(n-2); 1 #include<cstdio> 2 #include<string.h> 3 #include<iostream> 4 using namespace std; 5 #define N 10000 6 int b[N],c[N],t[N]; 7 int re[260][N]; 8 struct node 9 {10 int len;11 int re[N];12 }a[260];13 void ca()14 {15 int i,j;16 a[0 阅读全文
posted @ 2012-03-05 19:55 AC_Girl 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 题目就是先给出一个母串,然后给出一个子串,看这个子串的所有字符是否在母串里按从前到后的顺序出现过 1 #include<stdio.h> 2 #include<iostream> 3 #include<algorithm> 4 #include<string.h> 5 using namespace std; 6 #define N 100000 7 char str[N],sbr[N]; 8 int main() 9 {10 int i,j;11 while(cin>>sbr>>str)12 {13 int len1=s 阅读全文
posted @ 2012-03-05 19:51 AC_Girl 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 题目就是间接的让你翻译单词的,输入的每一行有两个单词,其中有一个可以认为是字典,另一个就是要翻译成的单词了可能是我想的复杂了,我是用trie树做的。先定义一个结构体,存储输入的字符串 1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 #define N 20 5 #define M 100001 6 using namespace std; 7 struct node 8 { 9 int k;10 node *key[26];11 node()12 {13 for(in... 阅读全文
posted @ 2012-03-05 19:47 AC_Girl 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 就是简单的并查集应用,直接套模板都不带有改动的 1 #include<stdio.h> 2 #include<iostream> 3 #include<string.h> 4 using namespace std; 5 #define N 30001 6 int a[N]; 7 int find(int x) 8 { 9 if(a[x]!=x) return a[x]=find(a[x]);10 return a[x];11 }12 int main()13 {14 int i,k;15 int n,m;16 while(cin>>n>& 阅读全文
posted @ 2012-03-05 19:41 AC_Girl 阅读(119) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2299题目就是让用归并排序求逆序数的。逆序数简单定义为:当i<j 时有Ai>Aj 则(Ai Aj) 就是一对逆序数 1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 using namespace std; 5 #define N 500001 6 __int64 sum; 7 int a[N],b[N]; 8 void merg(int l,int mid,int r) 9 {10 int i;11 int p=l 阅读全文
posted @ 2012-03-05 19:39 AC_Girl 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 #include<iostream> 5 using namespace std; 6 #define N 100000 7 int a[N]; 8 int main() 9 {10 int i;11 int n;12 while(cin>>n)13 {14 memset(a,0,sizeof(a));15 for(i=0;i<n;i++)16 cin>>a[i];17 ... 阅读全文
posted @ 2012-03-05 18:59 AC_Girl 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 这是一道并查集的简单题目,只要套用并查集的模板就可以了。题目的意思:输入一个n和m,接下来的m行,给出两个数x和y表示x和y有关系(你可以默认为他们信的一个宗教)。最后让你输出一共可以找到几个不同的宗教。 1 #include<stdio.h> 2 #include<iostream> 3 #include<string.h> 4 using namespace std; 5 #define N 50010 6 int a[N]; 7 int find(int x) 8 { 9 if(a[x]!=x) return a[x]=find(a[x]);10 re 阅读全文
posted @ 2012-03-05 18:50 AC_Girl 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 这道题目的意思就是给一个N 一个P 求一个K 使得他们满足这样的关系 K^N=P;我是直接用的数学函数pow来求的,可能是题目要求的不高,变量用double型的就直接过了 1 #include<iostream> 2 #include<math.h> 3 using namespace std; 4 int main() 5 { 6 double n,p; 7 while(cin>>n>>p) 8 { 9 double k;10 k=pow(p,1/n);11 cout<<k<<endl;12 }13 re... 阅读全文
posted @ 2012-03-05 18:43 AC_Girl 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 贪心类题目 1 #include<stdio.h> 2 #include<iostream> 3 #include<string.h> 4 #include<algorithm> 5 #include<math.h> 6 #include<stdlib.h> 7 using namespace std; 8 #define N 10010 9 struct node10 {11 double x,y;12 }a[N];13 bool cmp(node a,node b)14 {15 return a.x<b.x;16 阅读全文
posted @ 2012-03-05 18:40 AC_Girl 阅读(186) 评论(0) 推荐(0) 编辑