CodeForces 404 Marathon ( 浮点数取模 -- 模拟 )
1 second
256 megabytes
standard input
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.
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.
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.
2 5
2
1.0000000000 2.0000000000
2.0000000000 0.0000000000
4.147 2.8819
6
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 ( 浮点数取模 -- 模拟 )的更多相关文章
- C语言fmod()函数:对浮点数取模(求余)
头文件:#include <math.h> fmod() 用来对浮点数进行取模(求余),其原型为: double fmod (double x); 设返回值为 ret,那么 x = ...
- fmod()函数 (对浮点数取模)
头文件:#include <math.h> fmod() 用来对浮点数进行取模(求余),其原型为: double fmod (double x); 设返回值为 ret,那么 x = ...
- Codeforces 521C (经典)组合数取模【逆元】
<题目链接> <转载于 >>> > 题目大意:给出一串n个数字,让你在这串数字中添加k个 ' + ' 号(添加后表达式合法),然后所有拆分所得的所有合法表达 ...
- codeforces 404 B Marathon【fmod对浮点数取余】
题意:给出一个边长为a的正方形,给出d,给出n,输出走得距离为i个d的时候的坐标 学习的这一篇 http://blog.csdn.net/synapse7/article/details/215956 ...
- Gym100947E || codeforces 559c 组合数取模
E - Qwerty78 Trip Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u S ...
- CodeForces 450B (矩阵快速幂模板题+负数取模)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=51919 题目大意:斐波那契数列推导.给定前f1,f2,推出指定第N ...
- 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 ...
- CodeForces Round #191 (327C) - Magic Five 等比数列求和的快速幂取模
很久以前做过此类问题..就因为太久了..这题想了很久想不出..卡在推出等比的求和公式,有除法运算,无法快速幂取模... 看到了 http://blog.csdn.net/yangshuolll/art ...
- Codeforces 57C (1-n递增方案数,组合数取模,lucas)
这个题相当于求从1-n的递增方案数,为C(2*n-1,n); 取模要用lucas定理,附上代码: #include<bits/stdc++.h> using namespace std; ...
随机推荐
- 假设在一个 32 位 little endian 的机器上运行下面的程序,结果是多少?
假设在一个 32 位 little endian 的机器上运行下面的程序,结果是多少? #include <stdio.h> int main(){ , b = , c = ; print ...
- centos nginx uwsgi django
doc link uwsgi link video link
- 线程的start和run方法的区别
回到这个问题,可以用源码的角度去回答,这样会让面试官对有更好的印象 ------>如果直接调用run方法的话,所执行的线程是main线程.调用start方法的话,会新建一个子线程,去执行run方 ...
- C字符串指针遇到的问题
看下面的示例代码: int main() { char *ptr = "GeeksQuiz"; printf("%c\n", *&*&*ptr) ...
- Shading-jdbc源码分析-sql词法解析
前言 前有芋艿大佬已经发过相关分析的文章,自己觉的源码总归要看一下,然后看了就要记录下来(记性很差...),所以就有了这篇文章(以后还要继续更
- linux wget变成000权限
今天使用wget下载文件时出现:-bash: /usr/bin/wget: 权限不够. 查看 /usr/bin/wget 的权限为: ---------- 1 root root 357400 3月 ...
- 条款13:以对象管理资源(use objects to manage resources)
NOTE: 1.为防止资源泄漏,请使用RAII对象,它们在构造函数中获得资源并在析构函数中释放资源. 2.两个常被使用的RAII classes 分别是 trl::shared_ptr 和 auto_ ...
- Java基础学习总结(90)——Java单元测试技巧
测试是开发的一个非常重要的方面,可以在很大程度上决定一个应用程序的命运.良好的测试可以在早期捕获导致应用程序崩溃的问题,但较差的测试往往总是导致故障和停机. 虽然有三种主要类型的软件测试:单元测试,功 ...
- 完善的IaaS云服务的个人理解
此文已由作者王盼授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 前情提要 本文仅讨论云主机(虚拟机).云硬盘(块存储).云网络(普通虚拟网络或SDN)相关的IaaS服务,相关 ...
- Tomcat 7.0.3x 启动慢并且遇到StackOverflowError的异常的解决办法
http://qiuboboy.iteye.com/blog/1853216 使用tomcat 7.0.3x版本的同学可以发现tomcat启动慢了不少,而且还可能遇到如下启动时异常: Unable t ...