网站:csust训练3
A 三分的题目,给出灯高,人高,以及和墙的距离,求最长的影子长度。 Light Bulb ZOJ 3203
本来我是三分角度,角度[0,atan(H/D)],测试数据都是对的,但是WA了,我到现在还是不知道为什么........
后来是三分投在墙上的影子长度,[0,h],投在墙上的影子最多是h。
代码: 0MS
1 #include <stdio.h> 2 #include <iostream> 3 #include <math.h> 4 using namespace std; 5 int main() 6 { 7 double H,h,D,l,r,mid,midd,l1,l2; 8 int T; 9 scanf("%d",&T); 10 while (T--) 11 { 12 scanf("%lf%lf%lf",&H,&h,&D); 13 r=h; 14 l=0; 15 while(r-l>1e-9) 16 { 17 mid=(l+r)/2; 18 midd=(mid+r)/2; 19 l1=mid+D*(h-mid)/(H-mid); 20 l2=midd+D*(h-midd)/(H-midd); 21 if(l1<l2) 22 l=mid; 23 else 24 r=midd; 25 } 26 printf("%.3lf ",l2); 27 } 28 return 0; 29 }
这道题还有个数学方法,直接求峰值,详情见:http://blog.csdn.net/freezhanacmore/article/details/9887115 (表示膜拜,用数学方法的都膜拜)
B 求最长回文子串的长度,如果暴力0(n^2)果断超时,要用Manacher算法。
优化原因见: http://www.2cto.com/kf/201210/164253.html
代码: 360 ms/15000ms 10936kb/65536kb 这道题的时间限制真长......从没做过15s的题Orz
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 using namespace std; 5 #define N 1000008 6 char str[N], str1[N<<1]; 7 int p[N<<1]; 8 int maxx; 9 void Manacher() 10 { 11 int i, j, mx, id; 12 memset(str1, '#', sizeof(str1)); 13 memset(p, 0, sizeof(p)); 14 for(i=0; str[i]!='