code forces 404B Marathon 题目链接:http://codeforces.com/problemset/problem/404/B
题目大意:跑马拉松,有人给递水。场地是一个边长为a米的正方形(逆时针跑),每隔k米就喝一瓶水,总共有n瓶水。问每次喝水的位置坐标。
题目分析:先把k减到一圈以下,然后就能保证不TLE了。随意模拟即可。
code:
#include<stdio.h>
int main()
{
double a,d,posx,posy,dd;
int n,con;
while(scanf("%lf%lf%d",&a,&dd,&n)!=EOF)
{//1右2上3左4下
con=1;
posx=posy=0;
while(dd>=4*a)dd-=4*a;
d=dd;
while(n--)
{
switch(con)
{
case 1:
{
if(posx+d<=a)
{
posx+=d;
printf("%.10f %.10f\n",posx,posy);
d=dd;
}
else
{
d-=a-posx;
posx=a;
n++;
con++;
}
break;
}
case 2:
{
if(posy+d<=a)
{
posy+=d;
printf("%.10f %.10f\n",posx,posy);
d=dd;
}
else
{
d-=a-posy;
posy=a;
n++;
con++;
}
break;
}
case 3:
{
if(posx-d>=0)
{
posx-=d;
printf("%.10f %.10f\n",posx,posy);
d=dd;
}
else
{
d-=posx;
posx=0;
n++;
con++;
}
break;
}
case 4:
{
if(posy-d>=0)
{
posy-=d;
printf("%.10f %.10f\n",posx,posy);
d=dd;
}
else
{
d-=posy;
posy=0;
n++;
con=1;
}
break;
}
}
}
}
return 0;
}
PS:第八组样例是大数,不处理k就TLE