HDU-盐水的故事
http://acm.hdu.edu.cn/showproblem.php?pid=1408
这是一道高精度问题:
在自己错了数十遍之后找到了不少规律:
首先是Output limit exceeded:之前一直不知道是什么意思,现在才知道是输入输出的精度有问题
/* */
# include <bits/stdc++.h>
using namespace std; int main()
{
long long int VUL, D, i, t, f;
while( ~ scanf("%lld %lld", &VUL, &D) )
{
t=;
for( i=; ; i++ )
{
f = i*D;
if( VUL>f )
{
t += i;
t += ;
}
else if( VUL==f )
{
t += i;
break;
}
else
{
if( VUL%D== )
{
t += VUL/D;
break;
}
else
{
t += VUL/D+;
break;
}
}
VUL = VUL - i * D;
}
printf("%lld\n", t);
}
return ;
}
然后就是中间代码的精度问题了:
记住比较大小时,double类型跟double类型的比,int类型跟int类型的比,double要是跟int类型的比会有精度缺失
以下是AC代码:
/* */
# include <bits/stdc++.h>
using namespace std; int main()
{
long long int i, t;
double VUL, D, f;
while( ~ scanf("%lf %lf", &VUL, &D) )
{
t=;
for( i=; ; i++ )
{
int p = (int)(VUL/D);///double 类型求余数
double r = VUL - p * D;///double 类型求余数
f = i*D*1.0;
if( VUL>f )
{
t += i;
t += ;
}
else if( VUL==f )
{
t += i;
break;
}
else if( r>=0.000001 )///不能跟0比,(即不能用r>0来判)
{
t += p+;
break;
}
else
{
t += p;
break;
}
VUL = VUL - f;
}
printf("%lld\n", t);
}
return ;
}
注意观察以下WA代码和上面的AC代码:可以发现(r==0.000000)是错误的,是不是0.000000==0呀,它也是int类型的?(欢迎大佬评论)
/* */
# include <bits/stdc++.h>
using namespace std; int main()
{
long long int i, t;
double VUL, D, f;
while( ~ scanf("%lf %lf", &VUL, &D) )
{
t=;
for( i=; ; i++ )
{
int p = (int)(VUL/D);
double r = VUL - p * D;
f = i*D*1.0;
if( VUL>f )
{
t += i;
t += ;
}
else if( VUL==f )
{
t += i;
break;
}
else if( r==0.000000 )
{
t += p;
break;
}
else
{
t += p+;
break;
}
VUL = VUL - f;
}
printf("%lld\n", t);
}
return ;
}
PS.另一种AC代码:
#include<stdio.h>
int main()
{
double v,d;
long long int t;
while(scanf("%lf%lf",&v,&d)!=EOF)
{
int i;
t=;
for(i=;; i++)
{
if(v-i*d<=)
{
while(v>0.0000001)/*v与0比较的话就WA了,因为d可能很小很小,而d无论多小,v只要剩下就得算*/
{
v=v-d;
t++;
}
break;
}
v=v-i*d;
t=t+i;
t++; }
printf("%lld\n",t);
}
return ;
}
HDU-盐水的故事的更多相关文章
- C题 hdu 1408 盐水的故事
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1408 盐水的故事 Time Limit: 2000/1000 MS (Java/Others) ...
- 盐水的故事[HDU1408]
盐水的故事Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submissio ...
- 盐水的故事(hdu1408)
盐水的故事 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- 题解报告:hdu 1408 盐水的故事
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1408 Problem Description 挂盐水的时候,如果滴起来有规律,先是滴一滴,停一下:然后 ...
- HDU 1408 盐水的故事 数学水题
http://acm.hdu.edu.cn/showproblem.php?pid=1408 题目: 挂盐水的时候,如果滴起来有规律,先是滴一滴,停一下:然后滴二滴,停一下:再滴三滴,停一下...,现 ...
- HDOJ(HDU) 1408 盐水的故事
Problem Description 挂盐水的时候,如果滴起来有规律,先是滴一滴,停一下:然后滴二滴,停一下:再滴三滴,停一下-,现在有一个问题:这瓶盐水一共有VUL毫升,每一滴是D毫升,每一滴的速 ...
- hdu 1408 盐水的故事
Problem Description 挂盐水的时候,如果滴起来有规律,先是滴一滴,停一下:然后滴二滴,停一下:再滴三滴,停一下...,现在有一个问题:这瓶盐水一共有VUL毫升,每一滴是D毫升,每一滴 ...
- 6J - 盐水的故事
挂盐水的时候,如果滴起来有规律,先是滴一滴,停一下:然后滴二滴,停一下:再滴三滴,停一下...,现在有一个问题:这瓶盐水一共有VUL毫升,每一滴是D毫升,每一滴的速度是一秒(假设最后一滴不到D毫升,则 ...
- HDU1408 - 盐水的故事
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1408 解题思路:主要考虑最后一滴可能不满足D毫升,但仍算1秒.另外还要注意浮点数的比较. #inclu ...
- 【HDOJ】1408 盐水的故事
简单题,感觉非常简单,像小学奥数的植树问题. #include <stdio.h> #include <math.h> #define MAXNUM 5001 int main ...
随机推荐
- 转 js一个简单实用的弹出层
关闭 点击查看 >> <html> <head> <title>新文件标题</title> <script type=" ...
- ActiveX的AssemblyInof.cs文件 IObjectSafety 接口
ActiveX的AssemblyInof.cs文件 IObjectSafety 接口 [Guid("D4176A17-2A33-4903-8F37-9EBDD7CAFFD3"), ...
- pip install scrapy 报错
最近在研究Python,安装scrapy过程中报错如下图: 尝试找了一下解决方式:下载已经编译好的.whl安装包 步骤如下: 1.下载与Python版本和系统版本相匹配的Twisted包,网址:htt ...
- javascript 数组排序原理的简单理解
js内置的Array函数原型对象有个sort方法,这个方法能按照顺序排序数组. 例如: var arr1 = [6, 4, 2, 5, 2]; arr1.sort((x, y) => x - y ...
- Redhat下Oracle 12c单节点安装
操作系统:Redhat6.7 64位[root@Oracle12CDB ~]# more /etc/redhat-release Red Hat Enterprise Linux Server rel ...
- sql的匹配和正则表达式
1. 匹配:like 关键字 #假设存在表 my_test_copy select * from my_test_copy; 则使用like关键词匹配:注意下划线 '_'和百分号 '%' # 下划线' ...
- zabbix Server 4.0 监控JMX监控详解
zabbix Server 4.0 监控JMX监控详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 大家都知道,zabbix server效率高是使用C语言编写的,有很多应用 ...
- 用java刷剑指offer(二叉树中和为某一值的路径)
题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大 ...
- 右键tomcat找不到项目:There are no resources that can be added or removed from the server.
右键Add and Remove找不到项目,会出现下面这个弹框: 之后在项目文件夹上右键(Java Build Path中引用的jdk的版本也需要和下面这个Project Facets中配置的java ...
- Windows 远程访问 ubuntu 16 lts
remote access ubuntu 使用安装使用vncserver (除非必要,不要使用图形界面,底层码农真的应该关心效率) $ sudo apt-get install vncsever wi ...