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. vs2022不安装docker desktop可以打包镜像吗

    vs2022开发的项目可以直接打包镜像到 linux主机. idea 可以使用docker插件直接打包镜像到linux,我想vs2022也可以,于是开始摸索 官网只说支持docker desktop ...

  2. Linux下错误解决方案

    错误 "E: Unable to correct problems, you have held broken packages."这种问题包破坏问题,可能是由于镜像源与系统版本不 ...

  3. 将.gradle下的 带hash名称文件夹中的依赖 转换为 .m2上的依赖

    背景:  android studio 在无法下载依赖的情况下 , 仅 使用 mavenLocal() 本地 .gradle 下有对应依赖 , .m2下没有 故将.gradle下的 带hash名称文件 ...

  4. Java 多个String(字符串)判断是否null(空值)

    Java 多个String(字符串)判断是否null(空值) 示例: String s = null; if (str1 != null) { s = str1; } else if (str2 != ...

  5. Opensack-T版脚本安装

    openStack-train 搭建部署 项目环境: 主机名 外网口(net) 内口(仅主机)s 配置 controller 192.168.220.10/192.168.220.1/24 192.1 ...

  6. Identity – Authorize

    前言 Authorize 授权和 Identity Framework 关系不是很大. 虽然 Framework 有帮忙处理 Role, Claims 这些, 但这些只是整个 Authorize 小部 ...

  7. 分享3款开源、免费的Avalonia UI控件库

    Avalonia介绍 Avalonia是一个强大的框架,使开发人员能够使用.NET创建跨平台应用程序.它使用自己的渲染引擎绘制UI控件,确保在Windows.macOS.Linux.Android.i ...

  8. 暑假集训CSP提高模拟8

    一看见题目列表就吓晕了,还好我是体育生,后面忘了 唉这场比赛没啥好写的,要不就是太难要不就是太简单要不就是拉出去写在专题里了 A. 基础的生成函数练习题 考虑到只有奇偶性相同才能尝试加二,因此先用加一 ...

  9. 数据库排行榜|当 DB-Engines 遇见墨天轮国产数据库排行

    提到数据库排名,此时脑海里浮现出的是什么?是 DB-Engines,还是墨天轮数据库排行?两者间有什么区别?下面来聊一下业内这两个知名数据库排名平台. 本篇文章约有 3000 字,预计阅读时间 7 分 ...

  10. 《使用Gin框架构建分布式应用》阅读笔记:p52-p76

    <用Gin框架构建分布式应用>学习第4天,p32-p76总结,总计25页. 一.技术总结 1.Go知识点 (1)iouti 书上使用ioutil包读取JSON文件,但是从go 1.16 开 ...