题目链接:http://codeforces.com/problemset/problem/404/B
题意:一哥们在一个露天广场跑马拉松,广场的每条路都和坐标轴平行,并逆时针跑。即如果跑了 a 米的坐标是(0, a)。每隔 d 米这个哥们就不行了,要喝水。现在这哥们的专职教练要确定他跑不动的坐标位置。
思路:跑了 d* x 米后就判断运动员的位置。只存在四个边。模4后判断就行。 卡浮点数输出整型数。printf("%f", 0); 0 是个整型数,占4个字节, double 占8个字节。 所以应该是 printf("%f", 0.0); 后又卡在第三条道和第四条道上,当运动员跑到第三条道的时候,他是从最右边往左边跑的,在第四条道的时候是从最上边往下边跑的,要用 a - (在该条道上已跑的路程)。提交后数据又来个超范围。int 是 4个字节的话,最大只有 2^31。大概也就 2 * 1e9 。所以这里应该用 long long 。8个字节的整型数。
代码:
#include <stdio.h>
#include <math.h>
int main(){
double a, d;
int n;
int i;
scanf("%lf%lf", &a, &d);
scanf("%d", &n);
for(i = 1; i <= n; ++i){
long long t = floor(i*d / a);
double p = i*d - t*a;
t %= 4;
switch(t){
case 0:
printf("%.10f %.10f", p, 0.0);
break;
case 1:
printf("%.10f %.10f", a, p);
break;
case 2:
printf("%.10f %.10f", a-p, a);
break;
case 3:
printf("%.10f %.10f", 0.0, a-p);
break;
}
printf("\n");
}
return 0;
}