A. Efim and Strange Grade
time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

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.

Input

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.

Output

Print the maximum grade that Efim can get in t seconds. Do not print trailing zeroes.

Examples
input
6 1
10.245
output
10.25
input
6 2
10.245
output
10.3
input
3 100
9.2
output
9.2
Note

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的更多相关文章

随机推荐

  1. Performance Tunning - OCP

    This artical is forcused on Oracle 11g Release 2.  It is an summary from the OCP documentation. The ...

  2. CI session 类的用法

    最近使用codeingiter框架,发现默认的session 不是很好用,以下是用法总结:使用的是2.0.2的版本 1.扩展自带的session类:application/libraries/MY_s ...

  3. Vim 经常使用快捷键及键盘图

    Vim经常使用的快捷键 h - 光标左移一个字符   j - 光标下移一个字符 k - 光标上移一个字符   l - 光标右移一个字符  下移15行 - 15j Ctrl + f - 屏幕向下移动一页 ...

  4. CentOS 7下安装Hadoop2.2

    这里就介绍CentOS的安装了,直接进入Hadoop2.2伪分布模式安装. 1.安装包下载 1.1.下载JDK1.7 眼下JDK的版本号是jdk1.8.0_25.这里下载的是jdk1.7.0_67. ...

  5. ListView总结(多选框ListViiew,动态加载,多线程更新ListView中的进度条)

    Why ListView? ListView 如果仅仅出于功能上的需求ListView可能没有存在的必要,ListView能作的事情基本上ScrollView也能胜任.ListView存在的最根本的原 ...

  6. bzoj1023 [SHOI2008]cactus仙人掌图 & poj3567 Cactus Reloaded——求仙人掌直径

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1023    http://poj.org/problem?id=3567 仙人掌!直接模仿 ...

  7. KVO中你所不知道的"坑"

      一.什么是 KVO 首先让我们了解一下什么KVO,全称为Key-Value Observing,是iOS中的一种设计模式,用于检测对象的某些属性的实时变化情况并作出响应.键值观察Key-Value ...

  8. 关于 node.js 小插曲

    随着web2.0的时代到来,javascript在前端担任了更多的职责,事件也看得到了广泛的应用,node不像rhino那样受java的影响很大,而是将前端浏览器中应用广泛企鹅成熟的事件引入后端,配合 ...

  9. JS判断数组是否包含某元素

    我在学习ES6数组拓展时,发现了新增了不少了有趣的数组方法,突然想好工作中判断数组是否包含某个元素是非常常见的操作,那么这篇文章顺便做个整理. 1.for循环结合break 可能很多人第一会想到for ...

  10. java 锁机制(synchronized 与 Lock)

    在java中,解决同步问题,很多时候都会使用到synchronized和Lock,这两者都是在多线程并发时候常使用的锁机制. synchronized是java中的一个关键字,也就是说是java内置的 ...