Codeforces_718A
1 second
256 megabytes
standard input
standard output
Efim just received his grade for the last test. He studies in a special school and his grade can be equal to any positive decimal fraction. First he got disappointed, as he expected a way more pleasant result. Then, he developed a tricky plan. Each second, he can ask his teacher to round the grade at any place after the decimal point (also, he can ask to round to the nearest integer).
There are t seconds left till the end of the break, so Efim has to act fast. Help him find what is the maximum grade he can get in no more than t seconds. Note, that he can choose to not use all t seconds. Moreover, he can even choose to not round the grade at all.
In this problem, classic rounding rules are used: while rounding number to the n-th digit one has to take a look at the digit n + 1. If it is less than 5 than the n-th digit remain unchanged while all subsequent digits are replaced with 0. Otherwise, if the n + 1 digit is greater or equal to 5, the digit at the position n is increased by 1 (this might also change some other digits, if this one was equal to 9) and all subsequent digits are replaced with 0. At the end, all trailing zeroes are thrown away.
For example, if the number 1.14 is rounded to the first decimal place, the result is 1.1, while if we round 1.5 to the nearest integer, the result is 2. Rounding number 1.299996121 in the fifth decimal place will result in number 1.3.
The first line of the input contains two integers n and t (1 ≤ n ≤ 200 000, 1 ≤ t ≤ 109) — the length of Efim's grade and the number of seconds till the end of the break respectively.
The second line contains the grade itself. It's guaranteed that the grade is a positive number, containing at least one digit after the decimal points, and it's representation doesn't finish with 0.
Print the maximum grade that Efim can get in t seconds. Do not print trailing zeroes.
6 1
10.245
10.25
6 2
10.245
10.3
3 100
9.2
9.2
In the first two samples Efim initially has grade 10.245.
During the first second Efim can obtain grade 10.25, and then 10.3 during the next second. Note, that the answer 10.30 will be considered incorrect.
In the third sample the optimal strategy is to not perform any rounding at all.
题意:给一个小数点后至少有一位的小数(200000),t次四舍五入,只能舍小数点后的数,找最大的。1e9次查询。
模拟题。
之前每次都从小数点开始找第一个大于5的数,最开始一直超时。。。
其实,最开始找一次离小数点最近的大于5的数的位置。
循环中每次进行四舍五入后,从之前找到的那位往前找一个大于5的数,这个数一定是离小数点最近的大于5的数。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<stdlib.h>
#include<algorithm>
#include<cmath>
#include<string> using namespace std; char str[];
int main()
{
int l,t; str[]='';
scanf("%d%d%s",&l,&t,str+); //cout<<str<<endl;
int len=strlen(str)-,tail=len,point;
for(int i=; i<=len; i++)
if(str[i]=='.')
point=i;
int loc=-;
for(int i=len; i>point; i--)
{
if(str[i]>='')
{
loc=i;
}
}
if(loc>)
{
tail=loc;
while(t--)
{
len=tail;
loc=len;
// cout<<"len:"<<len<<endl;
//cout<<len<<"*"<<endl;
if(point>tail)
break;
for(int i=len; i>point; i--)
{
if(str[i]>='')
{
loc=i;
break;
}
} int jin=;
if(str[loc]>='')
jin=;
if(loc==len&&jin==)
break;
//cout<<loc<<"*"<<jin<<endl;
tail=loc-;
if(jin>&&str[tail]+jin<=''&&str[tail]!='.')
{
str[tail]+=jin;
jin=;
}
//cout<<str<<"*"<<endl;
while(jin>)
{
if(str[tail]=='.')
{
tail--;
}
str[tail]+=jin;
if(str[tail]<='')
jin=;
else
{
str[tail]-=;
tail--;
}
}
}
}
//cout<<str[]<<endl;
if(str[]=='')
{
if(tail<point)
tail=point;
for(int i=; i<=tail; i++)
{
if(i==tail&&str[tail]=='.')
continue;
putchar(str[i]);
}
putchar('\n');
}
else
{
if(tail<point)
tail=point;
for(int i=; i<=tail; i++)
{
if(i==tail&&str[tail]=='.')
continue;
putchar(str[i]);
}
putchar('\n');
}
//cout<<str<<endl; return ;
}
Codeforces_718A的更多相关文章
随机推荐
- Animations动画和Keyframes关键帧
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- UVa 10315 - Poker Hands
题目:两个人手里各有五张牌,比較两牌型大小. 比較规则例如以下:(按优先级排序,优先级同样按以下内部规则比較) 1.straight-flush:同花顺,牌面连续,花色同样,按最大的值比較. 2.fo ...
- 【转】Linux 查看CPU信息、机器型号等硬件信息
测试机器的硬件信息: 查看CPU信息(型号) # cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 8 Intel(R) Xeo ...
- 分布式消息服务DMS如何实现死信消息的消费
本文部分内容节选自华为云帮助中心的分布式消息服务(DMS)服务的产品介绍 死信消息是什么 死信消息是指无法被正常消费的消息.分布式消息服务DMS支持对消息进行异常处理.当消息进行多次重复消费仍然失败后 ...
- WebView与JavaScript交互--Android
转载请注明出处: http://blog.csdn.net/forwardyzk/article/details/46819925 在工作中,有一个这种需求,须要用到WebView与javascri ...
- Intellij热部署插件JRebel使用方法(转载)
Intellij热部署插件JRebel帮助开发者在项目处于运行状态下任意修改Java文件并动态反馈到运行的项目中.插件官方下载地址:https://plugins.jetbrains.com/plug ...
- 大写金额换算器iOS版源码
大写金额换算器iOS版源码 人民币金额大写转换器输入数字就可以转换成相应的人民币大写金额,操作很easy,需一键点击,就可以复制. 是財务办公人员必备的小工具. 银行.单位和个人填写的各种票据和结算凭 ...
- HDU - 3631 Shortest Path(Floyd最短路)
Shortest Path Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u SubmitStat ...
- javascript的call和apply
coffeescript里,每个文件编译成JS后,都是(function(){...}).call(this);的架势 这个call,该怎么理解呢? 在javascript里面,call 或者 app ...
- Codeforces Round #325 (Div. 2) B. Laurenty and Shop 前缀+后缀
B. Laurenty and Shop ...