Codeforces 237 div2 B. Marathon(关于精度损失的教训)
题目链接:http://codeforces.com/contest/404/problem/B?csrf_token=6292hf3e1h4g5e0d16a996ge6bgcg7g2
解题报告:一个正方形的跑道,边长是a,然后教练给运动员一个规定,每跑d米就额外补充一次饮料,然后输入一个n,表示一共将补充n次,比赛的出发点是(0,0),
也就是左下角的那个点,然后让你求出每次补充饮料的坐标。
本来看起来应该挺简单的一个模拟题,结果没想到一波三折,哎,技术问题啊。首先要注意的就是它规定的是精确到小数点后的四位,所以我在处理的时候,先把输入
全部乘以10000然后转化成整数来处理,这样就可以把小数点后四位以下都忽略掉,然后在输出的时候再转化一下就可以了,这样的想法是对的,但是我首先就犯了一个错误就是这题本来规定的数据范围是10^5,但是我做了乘10000处理,所以数据范围就到了10^9级别,所以int显然是不够的,一开始是这样错的,然后发现了又改过来了,
但是没想到改过来了还是错的,没办法,只好去看测试数据了,结果发现我的第7组测试数据的第6个数比正确的结果大了1,然后果断把那组数据在我本地测试了一下,
结果很纠结,97591.0354 一转化,就像见鬼了一样,转化整数后就成了975910353,怪不得会有个1的差距了,然后我左改又改,就像见鬼了一样,就是有个1的损失,
这时候我才意识到精度损失了,可是怎么解决呢,想起来以前用过一种+0.000001来防止精度损失的办法,果然改过之后就AC 了,哎,虽然这题没A ,但通过这次的教训,我希望可以记住下次碰到这种精度要求较高的题时切记要注意精度的问题了。哦,对了,还有一个,CF规定一定要用__int64,不能出现long long 以及类似的类型。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef __int64 INT; int main()
{
double c,e;
INT n;
while(scanf("%lf%lf",&c,&e)!=EOF)
{
scanf("%I64d",&n);
c *= 10000.0;
e *= 10000.0;
c += 0.000001;
e += 0.000001;
INT a = (INT)c;
INT d = (INT)e;
for(int i = ;i <= n;++i)
{
INT race = i * d;
race %= (*a);
double x,y;
if(race >= && race <= a)
{
x = (double)race / 10000.0;
y = ;
}
else if(race > a && race <= *a)
{
race -= a;
x = (double)a / 10000.0;
y = (double)race / 10000.0;
}
else if(race > *a && race <= *a)
{
race -= (*a);
race = a - race;
x = (double)race / 10000.0;
y = (double)a / 10000.0;
}
else if(race > *a && race <*a)
{
race -= (*a);
race = a - race;
x = ;
y = (double)race / 10000.0;
}
printf("%.10lf %.10lf\n",x,y);
} }
return ;
}
Codeforces 237 div2 B. Marathon(关于精度损失的教训)的更多相关文章
- 玉伯的一道课后题题解(关于 IEEE 754 双精度浮点型精度损失)
前文 的最后给出了玉伯的一道课后题,今天我们来讲讲这题的思路. 题目是这样的: Number.MAX_VALUE + 1 == Number.MAX_VALUE; Number.MAX_VALUE + ...
- Java中关于 BigDecimal 的一个导致double精度损失的"bug"
背景 在博客 恶心的0.5四舍五入问题 一文中看到一个关于 0.5 不能正确的四舍五入的问题.主要说的是 double 转换到 BigDecimal 后,进行四舍五入得不到正确的结果: public ...
- java操作Excel处理数字类型的精度损失问题验证
java操作Excel处理数字类型的精度损失问题验证: 场景: CELL_TYPE_NUMERIC-->CELL_TYPE_STRING--->CELL_TYPE_NUMERIC POI版 ...
- Codeforces #180 div2 C Parity Game
// Codeforces #180 div2 C Parity Game // // 这个问题的意思被摄物体没有解释 // // 这个主题是如此的狠一点(对我来说,),不多说了这 // // 解决问 ...
- (Jquery)避免数据相加小数点后产生多位数和计算精度损失
/** * 加法运算,避免数据相加小数点后产生多位数和计算精度损失. * * @param num1加数1 | num2加数2 */ function numAdd(num1, num2) { var ...
- JAVA浮点数计算精度损失底层原理与解决方案
浮点数会有精度损失这个在上大学的时候就已经被告知,但是至今完全没有想明白其中的原由,老师讲的时候也是一笔带过的,自己也没有好好琢磨.终于在工作的时候碰到了,于是google了一番. 问题: 对两个do ...
- Codeforces #541 (Div2) - E. String Multiplication(动态规划)
Problem Codeforces #541 (Div2) - E. String Multiplication Time Limit: 2000 mSec Problem Descriptio ...
- Codeforces #541 (Div2) - F. Asya And Kittens(并查集+链表)
Problem Codeforces #541 (Div2) - F. Asya And Kittens Time Limit: 2000 mSec Problem Description Inp ...
- Codeforces #541 (Div2) - D. Gourmet choice(拓扑排序+并查集)
Problem Codeforces #541 (Div2) - D. Gourmet choice Time Limit: 2000 mSec Problem Description Input ...
随机推荐
- UI Recorder 安装教程(二)
前言: UI Recorder支持无线native app(Android, iOS)录制, 基于macaca实现:https://macacajs.com/ 本次教程只针对无线native app( ...
- 实训三(cocos2dx 3.x 打包apk)
上一篇文章<实训二(cocos2dx 2.x 打包apk)>简单的讲述的利用cocos2dx 2.x引擎在windows平台上打包apk的方法与过程,本文将介绍3.x版本引擎,如何打包ap ...
- iOS中block循环引用问题
1.block是控制器对象的一个属性,则在block内部使用self将会引起循环应用 typedef void(^TestBlock)(); @interface SecondViewControll ...
- windows 服务实现定时任务调度(Quartz.Net)
我们通常在一些情况下需要软件具有一个自动执行某些任务的功能,但是又不希望直接启动软件,或者每次都要手动的来启动软件,这时我们可可以考虑到windows服务了. 首先创建一个windows服务项目(详细 ...
- 从零开始学Kotlin-扩展函数(10)
从零开始学Kotlin基础篇系列文章 什么是扩展函数 扩展函数数是指在一个类上增加一种新的行为,我们甚至没有这个类代码的访问权限: Kotlin 可以对一个类的属性和方法进行扩展,且不需要继承或使用 ...
- 软件工程作业 - Week 1
构建之法读后疑问: 初步的完成构建程序设计思路之后实现过程中发现了问题或者可以优化的地方是立马就改进还是完成之后按照步骤统一进行优化. 覆盖性测试,针对一些永远用不到只是用来预防极为极端的情况下,例如 ...
- 功能WBS分解
小组名称:飞天小女警 项目名称:礼物挑选小工具 小组成员:沈柏杉(组长).程媛媛.杨钰宁.谭力铭 代码地址:HTTPS: https://git.coding.net/shenbaishan/GIFT ...
- 【移动端debug-6】如何做一个App里的web调试小工具
原文链接:如何做一个App里的web调试小工具 我们知道现在hybrid app非常流行,在这样的app里,h5页面是应用非常广泛的.相对于以往在pc端开发的网页,放在app里的网页由于无法直接使用桌 ...
- 普通的jdbc事务在插入数据后 下面的代码报错时 数据不会回滚 但是 spring的事务会回滚
普通的jdbc事务在插入数据后 下面的代码报错时 数据不会回滚 但是 spring的事务会回滚
- Codeforces 68D - Half-decay Tree
题意 有一颗高度为 \(h\) 的完全二叉树(即点数为 \(2^{h+1}-1\) ),有两种操作: add x y 给 \(x\) 点的权值加 \(y\) decay 一次衰变定义为选择一个叶子节点 ...