CF718A Efim and Strange Grade 题解

算法

贪心+模拟

思路分析

显然,要最优每一次进位就只能五入不能四舍。而且当我们五入时,要取位数最高的。比如说 \(1.3535\),我们有两种进位方式,一种是进位成 \(1.4\),一种是进位成 \(1.354\),显然前者更优。

那这道题给的次数有啥用呢?

考虑一种“连环进位”。举个例子,\(2.4445\) 最终结果应该是 \(2.5\),进位三次。那我们的代码就很好设计了,先找到位数最高的大于五的数位,然后再向前找连续的 \(4\),连续的个数就是我们达到最优的次数,判断一下和所给的 \(t\) 的大小关系即可。

注意进位时 \(9\) 的再次进位,以及整数位进位会超 long long 等细节问题。

代码

代码仅供参考

#include <bits/stdc++.h>
using namespace std;
namespace Raiden
{
int a = -1, b;
signed work()
{
string s, s1;
int n, t;
cin >> n >> t;
cin >> s;
int st = s.find(".");
for (int i = st + 1; i < s.size(); i++)
{
if (s[i] - '0' >= 5)
{
a = i;
break;
}
}
for (int i = a - 1; i >= st; i--)
{
if (s[i] - '0' == 4)
b++;
else
break;
}
if (a == -1)
cout << s << endl;
else if (a == st + 1)
{
string s1 = s.substr(0, st);
for (int i = st-1; i >= 0; i--)
{
if (s1[i] != '9')
{
s1[i]++;
break;
}
else
s1[i] = '0';
}
if (s1[0] == '0')
cout << 1 << s1 << endl;
else
cout << s1 << endl;
}
else if (t >= b + 1)
{
if (a - b == st + 1)
{
string s1 = s.substr(0, st);
for (int i = st-1; i >= 0; i--)
{
if (s1[i] != '9')
{
s1[i]++;
break;
}
else
s1[i] = '0';
}
if (s1[0] == '0')
cout << 1 << s1 << endl;
else
cout << s1 << endl;
}
else
{
if (s[a - b - 1] == '9')
cout << s.substr(0, a - b - 2) << char(s[a - b - 2] + 1) << '0' << endl;
else
cout << s.substr(0, a - b - 1) << char(s[a - b - 1] + 1) << endl;
}
}
else
{
if (s[a - t] == '9')
cout << s.substr(0, a - t - 1) << char(s[a - t - 1] + 1) << '0' << endl;
else
cout << s.substr(0, a - t) << char(s[a - t] + 1) << endl;
}
return 0;
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
return Raiden::work();
}

题解:CF718A Efim and Strange Grade的更多相关文章

  1. Codeforces Round #373 (Div. 2) C. Efim and Strange Grade 水题

    C. Efim and Strange Grade 题目连接: http://codeforces.com/contest/719/problem/C Description Efim just re ...

  2. codeforces 719C. Efim and Strange Grade

    C. Efim and Strange Grade time limit per test 1 second memory limit per test 256 megabytes input sta ...

  3. Codeforces Round #373 (Div. 2) C. Efim and Strange Grade —— 贪心 + 字符串处理

    题目链接:http://codeforces.com/problemset/problem/719/C C. Efim and Strange Grade time limit per test 1 ...

  4. CF719C. Efim and Strange Grade[DP]

    C. Efim and Strange Grade time limit per test 1 second memory limit per test 256 megabytes input sta ...

  5. Efim and Strange Grade

    Efim and Strange Grade time limit per test 1 second memory limit per test 256 megabytes input standa ...

  6. codeforces 373 A - Efim and Strange Grade(算数模拟)

    codeforces 373 A - Efim and Strange Grade(算数模拟) 原题:Efim and Strange Grade 题意:给出一个n位的实型数,你可以选择t次在任意位进 ...

  7. Codeforces 718A Efim and Strange Grade 程序分析

    Codeforces 718A Efim and Strange Grade 程序分析 jerry的程序 using namespace std; typedef long long ll; stri ...

  8. 【22.17%】【codeforces718B】 Efim and Strange Grade

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  9. CodeForces 718A Efim and Strange Grade (贪心)

    题意:给定一个浮点数,让你在时间 t 内,变成一个最大的数,操作只有把某个小数位进行四舍五入,每秒可进行一次. 析:贪心策略就是从小数点开始找第一个大于等于5的,然后进行四舍五入,完成后再看看是不是还 ...

  10. 题解合集 (update on 11.5)

    收录已发布的题解 按发布时间排序. 部分可能与我的其他文章有重复捏 qwq . AtCoder for Chinese: Link ZHOJ: Link 洛谷 \(1\sim 5\) : [题解]CF ...

随机推荐

  1. MFC树形控件加载Access数据库数据

    研究了好几天,今天终于弄好了,下面是代码 [dlg.cpp] 在初始函数OnInitDialog()中加 HICON hIcon[3]; HTREEITEM hRoot; //加载三个图标 hIcon ...

  2. docker安装cdh6.3.2集群(联网版)

    一.前言 本次采用的在线安装方式,cdh为6.3.2版本,系统为centos7.4, docker节点可以为任意多个,下文将以3个docker容器为示例进行展示.此方法也可用在docker swarm ...

  3. verilog vscode 与AI 插件

    Verilog 轻量化开发环境 背景 笔者常用的开发环境 VIAVDO, 体积巨大,自带编辑器除了linting 能用,编辑器几乎不能用,仿真界面很友好,但是速度比较慢. Sublime Text, ...

  4. 一,初始 MyBatis-Plus

    一,初始 MyBatis-Plus @ 目录 一,初始 MyBatis-Plus 1. MyBatis-Plus 的概述 2. 入门配置第一个 MyBatis-Plus 案例 3. 补充说明: 3.1 ...

  5. 暑假集训CSP提高模拟18

    \[暑假集训CSP提高模拟 \ 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1 \] Very good problem, this make my news rotate. ...

  6. Hive----基本概念

    Hive 基本概念 1. Hive:由 Facebook 开源用于解决海量结构化日志的数据统计. 2. Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类 ...

  7. seaborn.lmplot详解

    官方文档 首先我们要知道,lmplot是用来绘制回归图的. 让我们来看看他的API: seaborn.lmplot(x, y, data, hue=None, col=None, row=None,  ...

  8. 干货必收藏!墨天轮最受DBA欢迎的250份学习文档合集

    作为一个DBA,必须要精通SQL命令.各种数据库架构.数据库管理和维护.数据库调优,必要的时候,还需要为开发人员搭建一个健壮.结构良好.性能稳定的数据库环境. 技术也是不断进步的,社会的发展要求DBA ...

  9. js 时间日期

    Date.parse()  把字符串时间转化为时间戳. new Date(时间戳) 转化 时间格式 时间比较大小

  10. 如何理解 .Net 中的 委托

    // 委托 // 一种方法的声明和定义,也就是方法的占位符 // 一般使用在 参数 和 属性中 int Add(int a,int b) { return a + b; } // 定义委托的三种方法 ...