摘要:
next[n],其实就是求从前往后数的字符串和从后往前数的字符串完全对应的最长位数(从后数和从前数不能完全相同),举例如a[5]=ababbc,next[0]=0(也可以是-1,网上的教程表示无所谓)next[1]=0,这个串(ab)从前缀数有a,ab,从后缀数有b,ab……不能相同,所以没一样的,为0.next[2]=1,这个串(aba)从前缀数有a,ab,aba,从后缀数有a,ba,aba……不能相同(去掉aba和aba),还剩下a[0]即a与a[3]即a完全对应,为1.next[3]=2,这个串(abab)从前缀数有a,ab,aba,abab从后缀数有b,ab,bab,abab……不能相 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=37823*n+1问题,直接上代码View Code #include<stdio.h>int main(){ int a[10001]; int i,x,sum; for(i=1;i<10001;i++) { x=i; sum=0; while(x!=1) { if(x%2==0) x/=2; else x=(3*x+1)/2; sum++; } ... 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1374给出三个点的坐标,设为A(x1,y1),B (x2, y2),C (x3, y3),然后求出通过这三点的圆的周长(保留两位小数)。但推导公式却比较麻烦,我是这样来做的。 首先根据同一个弦的圆心角角度相同,不难得出,圆周的直径d= BC/ sin a = AC/ sin b = AB/sin c; 因此求圆周长=BC / sin (a) *PI; 其中BC为角a的对边长度= sqrt ( (x2-x3)^2 + (y2-y3)^2);至于sin (a),我们必须通过三点坐标来算,比较麻烦一些,可以利用三角 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=2080先用向量求出cosx,再用公式arcos(cosx)求得答案,,,,View Code 1 #include <stdio.h> 2 3 4 #include <stdlib.h> 5 6 #include <math.h> 7 8 #define PI 3.141592653 9 10 int main()11 12 {13 14 int n;15 16 double x1,x2,y1,y2,m,t;17 18 scanf("%d",&n 阅读全文
摘要:
遇到看毛片算法,表示压力山大,想了有三天,各种调试错误,在next函数的调试上想了两天,用了两种写法,后来发现用一个循环,边比较,指针边移动或回溯,比较好,也较容易理解,菜鸟无解啊View Code 1 #include<stdio.h>//按kmp论文原来的模式 2 int next[10005],a[1000020],b[10010]; 3 void kmp(int m)//计算模式串中的next函数值,存入数组next中 4 { 5 int j,i; 6 next[1]=0; 7 i=1; 8 j=0; 9 while(i<m)10 ... 阅读全文
摘要:
View Code 1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 int j,i,next[20000],m; 6 char x[50000]; 7 while(scanf("%s",x)) 8 { 9 m=strlen(x);10 j=next[1]=0;11 i=1;12 while(i<=m)13 {14 if(j==0||x[j-1]==x[i-1]) //匹配的情况下,x[j-1]==x[i-1]15 ... 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=2057十六进制转成十进制,加减后再转成十六进制输出。。。。。转成的十进制太大,用__int64View Code 1 #include<stdio.h> 2 #include<string.h> 3 __int64 zhuan(char *s) 4 { 5 __int64 i=0,sum=0; 6 if(s[i]=='-'||s[i]=='+') 7 i++; 8 while(s[i]) 9 {10 if(s[i]>='0'& 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1994按题意写即可View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 int main() 4 { 5 int t; 6 double y,q,e,f,g,sum1,sum2; 7 scanf("%d",&t); 8 while(t--) 9 {10 scanf("%lf%lf%lf%lf%lf",&y,&q,&e,&f,&g);11 sum1= 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1141找到answer了ln(n!) < n * ln(2)!!!!!!!!!!!!!!!!!!View Code 1 #include<stdio.h> 2 #include<math.h> 3 int main() 4 { 5 long x,y,k,i; 6 long double p,t,z; 7 while(scanf("%d",&x)&&x!=0) 8 { 9 y=(x-1960)/10+2;10 z=pow(2,y);11 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1022刚开始想着用数组逐个进行判断,但是发现非常麻烦,得记录较多变量,当然,也可能自己太菜了,。。。下学期开始时学到了栈,感觉情形很像,就想着用栈来做,一边存入,一边和另一个字串,也就是O2进行比较,一旦有相同的,就出栈,这样能很全面的按照O2的顺序输出了,当最后栈顶元素为空时,就是可以按顺序输入,输出了,另外,用一个数组来存储每一次的进栈和出栈,最后输出“in”和“out”View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 typ 阅读全文