B. 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 equalsnd + 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 xi and yi,
separated by a space. Numbers xi and yi in
the i-th line mean that Valera is at point with coordinates (xi, yi) 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.

Sample test(s)
input
2 5
2
output
1.0000000000 2.0000000000
2.0000000000 0.0000000000
input
4.147 2.8819
6
output
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米求一次坐标。

浮点数的取模处理。当时做题的时候不知道浮点数取模函数:fmod()

百度百科:fmod

fmod - C函数名: fmod

功 能:计算x对y的模,即x/y的求余运算 。若y是0。则返回NaN

用 法:double fmod(double x,double y);

须要头文件: math.h

例程:

#include < stdio.h>
  #include < math.h>
  int main(void)
   {
  double x = 5.0,y = 2.0;
  double result;
  result = f mod(x,y);
  printf("The remainder of (%lf / %lf) is \%lf\n",x,y,result);
  return 0; 
}

执行结果是:The remainder of (5.000000/2.000000) is 1.000000

知道这个函数之后。题目就很好做了:

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
const int Inf=(1<<31)-1;
const double Eps=1e-15;
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
double a,d,l,s;
int i,j,n;
while(scanf("%lf%lf",&a,&d) !=EOF){
scanf("%d",&n);
l=a*4.0;
for(i=1; i<=n; i++){
s=fmod(i*d,l);
int flag=1;
while(s-a >0){
s-=a;
flag++;
}
if(fabs(s-a)<Eps){
s=0.0;
flag++;
} if(flag ==1){
printf("%.10lf %.10lf\n",s,0.0);
}
else if(flag == 2){
printf("%.10lf %.10lf\n",a,s);
}
else if(flag == 3){
printf("%.10lf %.10lf\n",a-s,a);
}
else {
printf("%.10lf %.10lf\n",0.0,a-s);
} } }
return 0;
}

精简代码:

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
const int Inf=(1<<31)-1;
const double Eps=1e-1;
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
double a,d,x,y,s=0.0;
int n;
scanf("%lf%lf%d",&a,&d,&n);
for(int i=1; i<=n; i++){
s+=d;
s=fmod(s,4*a);
if(s <= a)x=s,y=0;
else if(s <=2*a)x=a,y=s-a;
else if(s <=3*a)x=a-(s-2*a),y=a;
else x=0,y=a-(s-3*a);
printf("%lf %lf\n",x,y);
}
return 0;
}

CodeForces 404 Marathon ( 浮点数取模 -- 模拟 )的更多相关文章

  1. C语言fmod()函数:对浮点数取模(求余)

    头文件:#include <math.h> fmod() 用来对浮点数进行取模(求余),其原型为:    double fmod (double x); 设返回值为 ret,那么 x = ...

  2. fmod()函数 (对浮点数取模)

    头文件:#include <math.h> fmod() 用来对浮点数进行取模(求余),其原型为:    double fmod (double x); 设返回值为 ret,那么 x = ...

  3. Codeforces 521C (经典)组合数取模【逆元】

    <题目链接> <转载于 >>>  > 题目大意:给出一串n个数字,让你在这串数字中添加k个 ' + ' 号(添加后表达式合法),然后所有拆分所得的所有合法表达 ...

  4. codeforces 404 B Marathon【fmod对浮点数取余】

    题意:给出一个边长为a的正方形,给出d,给出n,输出走得距离为i个d的时候的坐标 学习的这一篇 http://blog.csdn.net/synapse7/article/details/215956 ...

  5. Gym100947E || codeforces 559c 组合数取模

    E - Qwerty78 Trip Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u S ...

  6. CodeForces 450B (矩阵快速幂模板题+负数取模)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=51919 题目大意:斐波那契数列推导.给定前f1,f2,推出指定第N ...

  7. Codeforces Round #260 (Div. 2) A B C 水 找规律(大数对小数取模) dp

    A. Laptops time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  8. CodeForces Round #191 (327C) - Magic Five 等比数列求和的快速幂取模

    很久以前做过此类问题..就因为太久了..这题想了很久想不出..卡在推出等比的求和公式,有除法运算,无法快速幂取模... 看到了 http://blog.csdn.net/yangshuolll/art ...

  9. Codeforces 57C (1-n递增方案数,组合数取模,lucas)

    这个题相当于求从1-n的递增方案数,为C(2*n-1,n); 取模要用lucas定理,附上代码: #include<bits/stdc++.h> using namespace std; ...

随机推荐

  1. Linux Shell参数扩展(Parameter Expansion)

    Shell Command Language在线文档: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html ...

  2. 区间DP入门

    所为区间DP,主要是把一个大区间拆分成几个小区间,先求小区间的最优值,然后合并起来求大区间的最优值. 区间DP最关键的就是满足最优子结构以及无后效性!! 例如像是石子合并和括号匹配这两类比较经典的模型 ...

  3. java 图片合成文字或者awt包下的对话框引入自定义字体库

    成就卡图片字体问题:1.下载 xxx.ttf 文件2.mkdir /usr/local/jdk1.6.0_11/jre/lib/fonts/fallback.     在jre/lib/fonts 下 ...

  4. python_装饰器——迭代器——生成器

    一.装饰器 1.什么是装饰器? 器=>工具,装饰=>增加功能 1.不修改源代码 2.不修改调用方式 装饰器是在遵循1和2原则的基础上为被装饰对象增加功能的工具 2.实现无参装饰器 1.无参 ...

  5. LeetCode(42)Trapping Rain Water

    题目 Given n non-negative integers representing an elevation map where the width of each bar is 1, com ...

  6. 《C/C++工程师综合练习卷》

    前言 前天拿这个<C/C++工程师综合练习卷>练习了一下,现将错题以及精题分析总结. 错题分析与总结 2 . 下面的程序可以从1-.n中随机等概率的输出m个不重复的数.这里我们假设n远大于 ...

  7. p3386 二分图匹配模板

    https://www.luogu.org/problemnew/show/P3386 可以只做一边的匹配 #include <bits/stdc++.h> using namespace ...

  8. Nginx学习总结(5)——Nginx基本配置备忘

    Nginx 配置 在了解具体的Nginx配置项之前我们需要对于Nginx配置文件的构成有所概念,一般来说,Nginx配置文件会由如下几个部分构成: # 全局块 ... # events块 events ...

  9. C#中为什么不能再方法里定义静态变量(Static)

    c#的静态变量是在对象生成的时候分配内存空间的,而不是函数执行的时候. 如果在函数里定义,那么这个变量就需要在函数执行的时候分配内存空间,这是C#不允许的,至于为什么不允许,个是因为垃圾回收机制的问题 ...

  10. 可以学习相关框架【转:https://testerhome.com/topics/6283】

    https://testerhome.com/topics/6283 单元测试方面(Java): Junit:本来想用我熟悉的testng,但是开发的同学说测试springmvc只能用Junit.所以 ...