S2_I_Marathon

Marathon

time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

Valera takes part in the Berland Marathon. The marathon race starts at the stadium that can be represented on the plane as a square whose lower left corner is located at point with coordinates (0, 0) and the length of the side equals a meters. The sides of the square are parallel to coordinate axes.

As the length of the marathon race is very long, Valera needs to have extra drink during the race. The coach gives Valera a bottle of drink each d meters of the path. We know that Valera starts at the point with coordinates (0, 0) and runs counter-clockwise. That is, when Valera covers a meters, he reaches the point with coordinates (a, 0). We also know that the length of the marathon race equals nd + 0.5 meters.

Help Valera’s coach determine where he should be located to help Valera. Specifically, determine the coordinates of Valera’s positions when he covers d, 2·d, …, n·d meters.

Input

The first line contains two space-separated real numbers a and d (1 ≤ a, d ≤ 105), given with precision till 4 decimal digits after the decimal point. Number a denotes the length of the square’s side that describes the stadium. Number d shows that after each d meters Valera gets an extra drink.

The second line contains integer n (1 ≤ n ≤ 105) showing that Valera needs an extra drink n times.

Output

Print n lines, each line should contain two real numbers x**i and y**i, separated by a space. Numbers x**i and y**i in the i-th line mean that Valera is at point with coordinates (x**i, y**i) after he covers i·d meters. Your solution will be considered correct if the absolute or relative error doesn’t exceed 10 - 4.

Note, that this problem have huge amount of output data. Please, do not use cout stream for output in this problem.

Examples

input

Copy

2 5
2

output

Copy

1.0000000000 2.0000000000
2.0000000000 0.0000000000

input

Copy

4.147 2.8819
6

output

Copy

2.8819000000 0.0000000000
4.1470000000 1.6168000000
3.7953000000 4.1470000000
0.9134000000 4.1470000000
0.0000000000 2.1785000000
0.7034000000 0.0000000000

题目大意

有一个正方形的运动场,边长为a,一个人从原点开始,逆时针跑。求出每次跑d米的坐标。

题目分析

其实是一道很简单的水题……然后很神经质的卡在了这里。主要是精度的问题吧。不过还是基础不是很扎实,卡在了几个奇奇怪怪的地方。

先说说自己踩了什么坑吧。

首先double输入的确是用的是"%lf",而输出用的是"%f"。这个是没问题的。

错是错在了输出的0的时候,用%lf输出0是不对的,要填0.0(直接在双引号里面打0不就好了)……在这里wa了几发了,超级傻逼。

再然后,浮点数取模,emmm虽然时候听大佬们说有fmod这种东西,可是为什么我事后用fmod还是过不了……

我是直接实现了一个。

long long k = (double) i * d / a;
double t = (double) i * d - k * a;

t就是余数。还有就是这道题n,d的范围是1e5。相乘就是1e10,int就爆了,卡了这一手我心态爆炸。

所以下面是水水的题目分析。

对于每一倍的d,都对a做除法与取模,然后模数对应一下几种情况:

if(k == 0)
    printf("%f %f\n", t, 0.0);
else if(k == 1)
    printf("%f %f\n", a, t);
else if(k == 2)
    printf("%f %f\n", a - t, a);
else if(k == 3)
    printf("%f %f\n", 0.0, a - t);

代码

#include <cstdio>
using namespace std;
int main(int argc, char const *argv[]) {
  double a, d;
  int n;
  scanf("%lf%lf%d", &a, &d, &n);
  for(int i = 1; i <= n; i++){
    long long k = (double) i * d / a;
    double t = (double) i * d - k * a;
    k %= 4;
    if(k == 0)
      printf("%f %f\n", t, 0.0);
    else if(k == 1)
      printf("%f %f\n", a, t);
    else if(k == 2)
      printf("%f %f\n", a - t, a);
    else if(k == 3)
      printf("%f %f\n", 0.0, a - t);
  }
  return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值