题目地址:戳这里
额,关键的一点是每次得到新的里程后都要化简到4*a 之内 ,保证精度
代码:
#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
typedef double ld;
struct point
{
ld x;
ld y;
point(ld _a,ld _b)
{
x=_a;
y=_b;
}
};
ld a,d;
point location(ld x)
{
// long long temp=floor(x/(4*a));
// x=x-temp*4*a;
if(x<=a) return point(x,0);
else if(x<=2*a) return point(a,x-a);
else if(x<=3*a) return point(3*a-x,a);
else return point(0,4*a-x);
}
int main()
{
int n;
cin>>a>>d;
cin>>n;
ld path=0;
for(int i=0;i<n;i++)
{
path+=d;
long long temp=floor(path/(4*a));
path=path-temp*4*a;
printf("%.10lf %.10lf\n",location(path).x,location(path).y);
}
}