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的更多相关文章
随机推荐
- fast recovery area
First of all, the version of my enviroment is Oracle 11.0.2.3. The fast recovery area used to be cal ...
- Spring注解配置定时任务<task:annotation-driven/>
http://m.blog.csdn.net/article/details?id=50945311 首先在配置文件头部的必须要有: xmlns:task="http://www.sprin ...
- Windows编程中char*转LPCWSTR解决的方法总结
Windows编程中常常涉及到的一个问题是字符串之间的转换,开发过程总是遇到编译器提示无法格式转换的问题.于是自己总结了几种解决的方法. 1.通过T2W转换宏 char* szStr = " ...
- 自己动手写reg注册表文件
自己动手写reg注册表文件 2015-01-12 20:23 1161人阅读 评论(1) 收藏 举报 分类: 玩转Windows应用层编程(12) 版权声明:本文为博主原创文章,未经博主允许不得转 ...
- 最简单的基于FFmpeg的移动端样例:Android HelloWorld
===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...
- MySQL运行计划初探
-Mysql运行计划总结– 1 运行计划概述 先看看一个运行计划 mysql> explain SELECT * FROM EMP , DAO_OBJECTS t1 , DAO_OBJECTS ...
- 修改RedHat 7.2 进程最大句柄数限制
RedHat对进程打开文件句柄数主要通过设置全局值和登陆用户分别管理.其中/proc/sys/fs下设置全局最大文件句柄数和用户进程能打开的最大文件句柄数,这两个参数一般情况下不需要修改. 对于普通用 ...
- 利用Spinnaker创建持续交付流水线
在Pivotal Container Service (PKS)上部署软件的方法多种多样,本文重点介绍如何使用Spinnaker在PKS(或任何Kubernetes群集)上进行持续交付. Pivota ...
- PCB MS SQL 标量函数(CLR) 实现DataTable转Json方法
一.准备需转为json字符串的DataTable数据 在数据库中执行一段SQL返回的数据 需转换后的JSON字符串的效果 [{"TechName":"开料",& ...
- Three Kingdoms(优先队列+bfs)
http://acm.hdu.edu.cn/showproblem.php?pid=3442 题意:ABCD有各自的攻击力与攻击范围,刘备只能走"C"与".", ...