在写这篇文章之前,xxx已经写过了几篇关于改枚举参考主题的文章,想要了解的朋友可以去翻一下之前的文章
http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id/1175
(2013湘潭邀请赛标题) Hurry Up |
||
Accepted : 62 |
|
Submit : 251 |
Time Limit : 1000 MS |
|
Memory Limit : 65536 KB |
Problem Description GG is some what afraid of his MM. Once his MM asks, he will always try his best to rush to their home. Input Multiple test cases. First line, an integer T ( 1 ≤ T ≤ 2000 ), indicating the number of test cases. Ouput For each test case, output a real number with 2 digits after the arithmetic point. It is the shorest time for GG to reach home. Sample Input 2 1 1 2 2 1 2 1 1 2 2 1 7 Sample Output 1.41 1.32
XTU OnlineJudge |
[ Submit Solution ]
//正解一
memory time length
1064 KB 31 MS 1123 B
#include<string.h>
#include<stdio.h>
#include<math.h>
#include<algorithm>
#include <iostream>
using namespace std;
const double ep=1e-10;
double vr,vt;
double xt,x2;
double y2,yt;
double lenth(double a1,double b1,double a2,double b2)
{
return sqrt((a1-a2)*(a1-a2)+(b1-b2)*(b1-b2));
}
double caltime(double x)
{
return (lenth(xt,yt,x,0)/vr+lenth(x2,y2,x,0)/vt);
}
int main()
{
int T,i;
double t1,t2,r,l;
while(scanf("%d",&T)!=EOF)
{
for(i=0;i<T;i++)
{
scanf("%lf%lf%lf%lf",&xt,&yt,&x2,&y2);
scanf("%lf%lf",&vr,&vt);
t1=lenth(xt,yt,x2,y2)/vr;
r=xt;
l=x2;
for(int i=0;i<100;i++)//这么多是参考某位大神的
{ double m1=l + (r-l)/3;
double m2=r - (r-l)/3;
if(caltime(m1)<=caltime(m2)) r=m2;
else l=m1;
}
t2=caltime(l);
t1=t1<t2? t1:t2;
printf("%.2lf\n",t1);
}
}
return 0;
}
正解二:/
枚举法
memory time length
1256 KB 593 MS 1176 B
//枚举法,枚举到0.1
#include<string.h>
#include<stdio.h>
#include<math.h>
#include<algorithm>
#include <iostream>
using namespace std;
const double ep=1e-10;
double vr,vt;
double xt,x2;
double y2,yt;
double lenth(double a1,double b1,double a2,double b2)
{
return sqrt((a1-a2)*(a1-a2)+(b1-b2)*(b1-b2));
}
double caltime(int x)
{ (double)x;
return (lenth(xt,yt,x,0)/vr+lenth(x2,y2,x,0)/vt);
}
int main()
{
int T,i,j;
double t1,t2,min,max,t;
while(scanf("%d",&T)!=EOF)
{
for(i=0;i<T;i++)
{
scanf("%lf%lf%lf%lf",&xt,&yt,&x2,&y2);
xt=xt*10.0;
yt=yt*10.0;
x2=x2*10.0;
y2=y2*10.0;
scanf("%lf%lf",&vr,&vt);
vr=vr*10.0;
vt=vt*10.0;
t1=lenth(xt,yt,x2,y2)/vr;
max=xt>x2? xt:x2;
min=xt<x2? xt:x2;
t2=1000000.0;
for(j=(int)min;j<=(int)max;j++)
{
t=caltime(j);
if(t2>t)
t2=t;
}
t1=t1<t2? t1:t2;
printf("%.2lf\n",t1);
}
}
return 0;
}
错误:
//三分法
#include<string.h>
#include<stdio.h>
#include<math.h>
#include<algorithm>
#include <iostream>
using namespace std;
const double ep=1e-10;
double vr,vt;
double xt,x2;
double y2,yt;
double lenth(double a1,double b1,double a2,double b2)
{
return sqrt((a1-a2)*(a1-a2)+(b1-b2)*(b1-b2));
}
double caltime(double x)
{
return (lenth(xt,yt,x,0)/vr+lenth(x2,y2,x,0)/vt);
}
double solve(double l,double r)//三分法
{
double m;
double mm;
while(l+ep<r)
{
m=(l+r)/2.0;
mm=(m+r)/2.0;
if(caltime(m)<caltime(mm))//取最小值
r=mm;
else
l=m;
}
return l;
}
int main()
{
int T,i;
double t1,t2;
while(scanf("%d",&T)!=EOF)
{
for(i=0;i<T;i++)
{
scanf("%lf%lf%lf%lf",&xt,&yt,&x2,&y2);
scanf("%lf%lf",&vr,&vt);
t1=lenth(xt,yt,x2,y2)/vr;
t2=caltime(solve(xt,x2));
t1=t1<t2? t1:t2;
printf("%.2lf\n",t1);
}
}
return 0;
}
文章结束给大家分享下程序员的一些笑话语录:
Borland说我很有前途,Sun笑了;Sun说我很有钱,IBM笑了;IBM说我很专业,Sybase笑了;Sybase说我数据库很牛,Oracle笑了;Oracle说我是开放的,Linux笑了;Linux说我要打败Unix,微软笑了;微软说我的系统很稳定,我们都笑了。
---------------------------------
原创文章 By
枚举和参考
---------------------------------