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. MyBatis 3判断不为null

    <if test="type!=null and type!=''"> AND type = #{type} </if>

  2. Spring MVC中@RequestMapping注解使用技巧(转)

    @RequestMapping是Spring Web应用程序中最常被用到的注解之一.这个注解会将HTTP请求映射到MVC和REST控制器的处理方法上. 在这篇文章中,你将会看到@RequestMapp ...

  3. 使用CDN

    CDN的全称是Content Delivery Network.中文直译过来是:内容交付网络. 它的主要意思是,将某些内容进行交付的网络.对于站点开发而言,我们所讲的内容通常指的是内容文件(比如jav ...

  4. 我的Android进阶之旅------&gt;Android的ListView数据更新后,怎样使最新的条目能够自己主动滚动到可视范围内?

    在ListView的layout配置中加入 android:transcriptMode="alwaysScroll" <ListView android:id=" ...

  5. [vs执行报错] CRT detected that the application wrote to memory after end of heap buffer

    CRT 是c/c++ run-time lib , 是程序执行时所需的核心库. 这个错误是由于以对内在操作的过程中.所写的地址超出了.所分配内在的边界 有个建议是: 1.内存申请多少释放多少,释放掉你 ...

  6. MyEclipse中加入web项目到tomcat

    假设导入不是在MyEclipse下建立的web项目,想加入到tomcat中时,会显示"No projects are available for deployment to this ser ...

  7. luogu3959 宝藏 搜索+剪枝

    题目大意 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋, 也给出了这 n 个宝藏屋之间可供开发的 m 条道路和它们的长度. 小明决心亲自前往挖掘所有宝藏屋中的宝藏.但是 ...

  8. visual studio推荐的插件

    https://marketplace.visualstudio.com/items?itemName=EricLebetsamer.BootstrapSnippetPack https://mark ...

  9. 选择排序(1)——简单选择排序(selection sort)

    选择排序是一种很常见的排序算法,它需要对数组 中的元素进行多次遍历.每经过一次循环,选择最小的元素并把它放在靠近数组前端的位置. 代码实现: public static void selectionS ...

  10. CodeForces - 557D Vitaly and Cycle(二分图)

    Vitaly and Cycle time limit per test 1 second memory limit per test 256 megabytes input standard inp ...