[刷题]算法竞赛入门经典 3-12/UVa11809
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO
题目:算法竞赛入门经典 3-4/UVa11809:Floating-Point Numbers
代码:
//UVa11809 - Floating-Point Numbers
#include<iostream>
#include<sstream>
#include<cmath>
long long E[12][33], e;
double M[12][33], m, re;
char str[25], *ps;
int main()
{
for (int i = 0;i <= 9;++i)//M
for (int j = 1;j <= 30;++j) {//E
m = 1 - pow(2, -1 - i);
e = pow(2, j) - 1;
re = log10(m) + log10(2)*e;
E[i][j] = (long long)re;
M[i][j] = pow(10, (re - E[i][j]));
}//打表完成,读入数据
while ((std::cin >> str) && (ps = str) != "0e0") {
while (*++ps != 'e');*ps = ' ';
std::istringstream s(str);
s >> m >> e;
for (int i = 0;i <= 9;++i) {//M
int j;
for (j = 1;j <= 30;++j) {//E
if (E[i][j] == e && (M[i][j] - m < 0.0001 && m - M[i][j] < 0.0001)) {//double达不到15位的精度,但是其实无所谓,差不离就行
std::cout << i << ' ' << j << '\n';
break;
}
}
if (j <= 30) break;
}
}
return 0;
}
分析:这题对我来说有点难,而且一开始做这题时精神状态不佳,磨洋工磨了一下午也没磨出来。甚至一开始看懂了题目但看不懂题意。。然后第二天继续做,在继承了昨天磨了一下午形成的固化思维下,有点思路但是感觉写下来会很烦琐。于是认认真真去网上看大神的思路。又不敢看太多,看太多了就没有自己的思路了完全是抄了,抄完该忘记的还是忘记。
这题主要看了这位大神的博客:http://blog.csdn.net/crazysillynerd/article/details/43339157
首先他是用的打表。这个方法我知道但一直没想到去用过。而这题刚好说了“The input file contains around 300 line of input”,同时有 9 ≥ M ≥ 0 and 30 ≥ E ≥ 1,10*30刚好300,用读表法再好不过。所以这也是我第一次用读表法。。下次就记住了。
然后怎么打表,我又不会了。。真的菜。。主要就是在两个循环里如何计算M和E。看到这位大大用了log什么的看了几眼没看懂,觉得还是自己动手算比较好,于是拿出草稿纸。事实证明草稿纸果真神器一枚,理思路、演算很有帮助。
我们要做的转化是:M x 10^E=m x 2^e(这个e与2.7的那个e无关),m和e可以根据i、j求出,也就是看成常数。那么两边取log10,得lg M + E x lg 2=lg M + e,左式可算出为re,右式E为long long,M为double,且因为使用的科学记数法,1<=M<10(虽然题目上只说0 < M < 10,但这位大神还去测了,题目中给的数据都是大于1的,钻研精神max),所以0 < lg M < 1,所以E = re - lg M,E为re的取整,即强制转化为long long即可,然后M也可求出。。天,这方法比我之前想的不知道快到哪里去了。。。
然后就是根据输入的数据读表,没什么问题。但是注意到那大神用了istringstream。这玩意我在C++Primer上看到过,当时还想着没什么用。现在才知道其威力!当我看到大神那句:
for(string::iterator i = in.begin(); i != in.end(); ++i) if(*i == 'e') *i = ' ';
瞬间让字符串可以直接输入到double和long long,简化了不少的代码!我做题目至今,用来用去就那几个东西,primer上看到的那些东西都没怎么用过。论活学活用的重要性。。。
于是最终。。我写出来的代码还是和那大神的还是太像了。。。跟抄作业的一样。。
[刷题]算法竞赛入门经典 3-12/UVa11809的更多相关文章
- [刷题]算法竞赛入门经典 3-1/UVa1585 3-2/UVa1586 3-3/UVa1225
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO(我也是在网上找到的pdf,但不记得是从哪里搜刮到的了,就重新上传了一遍) PS:第一次写博客分享我的代码,不知道我对c ...
- [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-10/UVa1587:Box 代码: //UVa1587 - Box #include&l ...
- [刷题]算法竞赛入门经典 3-7/UVa1368 3-8/UVa202 3-9/UVa10340
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 都是<算法竞赛入门经典(第二版)>的题目,标题上没写(第二版) 题目:算法竞赛入门经典 3-7/UVa13 ...
- [刷题]算法竞赛入门经典 3-4/UVa455 3-5/UVa227 3-6/UVa232
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa455:Periodic Strings 代码: //UVa455 #inclu ...
- [刷题]算法竞赛入门经典(第2版) 4-6/UVa508 - Morse Mismatches
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,10 ms) //UVa508 - Morse Mismatches #include< ...
- [刷题]算法竞赛入门经典(第2版) 5-15/UVa12333 - Revenge of Fibonacci
题意:在前100000个Fibonacci(以下简称F)数字里,能否在这100000个F里找出以某些数字作为开头的F.要求找出下标最小的.没找到输出-1. 代码:(Accepted,0.250s) / ...
- [刷题]算法竞赛入门经典(第2版) 5-13/UVa822 - Queue and A
题意:模拟客服MM,一共有N种话题,每个客服MM支持处理其中的i个(i < N),处理的话题还有优先级.为了简化流程方便出题,设每个话题都是每隔m分钟来咨询一次.现知道每个话题前来咨询的时间.间 ...
- [刷题]算法竞赛入门经典(第2版) 4-8/UVa12108 - Extraordinarily Tired Students
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,0 ms) //UVa12108 - Extraordinarily Tired Stude ...
- [刷题]算法竞赛入门经典(第2版) 4-5/UVa1590 - IP Networks
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,0 ms) //UVa1590 - IP Networks #include<iost ...
随机推荐
- 批量安装python库函数---pip
废话少说,要的就是干货 pip install -r 文件名 注意如果输入文件名报错,建议使用文件的绝对路径. 作者:marsggbo
- (一) 这就是所谓的Node.js------单线程,非阻塞,事件驱动
Node.js 第一天笔记(V1) 一:Node.js到底是从何而来 2008年的秋天,一个名叫做Ryan Dahl(罗伊・达尔)的年轻人在玩了几年服务器编程之后,越发感到服务器高并发性能的瓶颈是一个 ...
- windows下安装zabbix_agent
Server端在linux系统上,server端版本为2.2.6,是以前就装好的已经跑了很久的稳定版.目前的需求是要将新业务的服务器添加到该监控队列.而这些服务器是windows系统. 第一次下载了最 ...
- 《ECMAScript标准入门》第二版读书笔记
title: <ECMAScript标准入门>第二版 date: 2017-04-10 tags: JavaScript categories: Reading-note 2015年6月, ...
- 1129: 零起点学算法36——3n+1问题
1129: 零起点学算法36--3n+1问题 Time Limit: 1 Sec Memory Limit: 64 MB 64bit IO Format: %lldSubmitted: 4541 ...
- 06 Theory of Generalization
若H的断点为k,即k个数据点不能被H给shatter,那么k+1个数据点也不能被H给shatter,即k+1也是H的断点. 如果给定的样本数N是大于等于k的,易得mH(N)<2N,且随着N的增大 ...
- TCP/IP笔记(五)IP协议相关技术
IP旨在让最终目标主机收到数据包,但是在这一过程中仅仅有IP时无法实现通信的.必须还要又能够解析主机名称和MACdivide功能,以技术包在发送过程中异常情况处理的功能. 这篇主要介绍下DNS.ARP ...
- 从零开始用 Flask 搭建一个网站(一)
前言 笔者之前未接触过 Python,只是略懂一点前端,所以说从零开始也相差无几吧.Flask 是一个轻量级的基于 Python 的框架,但是扩展性非常良好(Github 上 22000 多个 sta ...
- python paramiko模块简介
一:简介 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. 由于使用的是python这样的能够跨平台运行的语言,所以所有python支 ...
- Java基础学习
1,基本类型和引用类型 基本类型就是一个盒子,数据本身就保存在盒子里面,引用类型的盒子里放的是数据的五:地址,通过这个地址来找到数据. 基本数据类型和堆中对象的引用保存在栈中,引用类型保存在堆中. 2 ...