B - Minor Reduction

题源:https://codeforces.com/contest/1626/problem/B

题意

给定一个超级大的整数 x ,可以对任意相邻两位数进行操作(把他们拿出来,然后再把他们的和放回原来的位置,注意不能有前导0,也就是说如果和是一位数的话就只放入一位数),求经过一次操作后的最大 x 为多少

思路

我的做法可能太绕了,特判了好多个。

  1. 首先特判掉只有两位数的情况(10 =< x < 100 ),直接加起来就行

  2. 一般情况:

  • 先来分析一下,如果相邻两位加起来能够进位的话,也就是结果还是两位数,对原 x 带来的影响是最小的,又因为和一定比原来两个数字小,所以我们优先对后面的位数来操作。

  • 如果不能进位,放在前面比较好,因为加起来所得到的值一定比原来两位上任何一个数大。比如123(33比15大)

那么就来实现一下:

统计每两个相邻数之和,存在cnt数组里面,记录一个最大的和maxn。对于当前的cnt[i],可以分为两种:

  1. 小于10(不进位的情况):只记录maxn

  2. 大于10(进位):越往后越好,记录下标 k 和 maxn

 对于maxn:

  1. maxn < 10:两数相加一定会比原来任何一位都大,高位数上的改变所增大的值一定比低位数上带来的影响大,所以要在前面改变(比如111,112)

  2. maxn >= 10:两数相加一定会变小,所以尽可能取低位数上来改变(如17878)

我滴代码

#include <iostream>
#include <algorithm>
#include <cstring> using namespace std;
const int N = 2e5 + 5;
int t; int main (){
cin >> t;
while (t --){
string s;
cin >> s;
if (s.size() == 2){
cout << (s[0] - '0') + (s[1] - '0') << endl;
continue;
}
int cnt[N] = {0}, maxn = -1, k = -1;
for (int i = 1; i < s.size(); i ++){
cnt[i] = (s[i] - '0') + (s[i - 1] - '0');
if (cnt[i] < 10){
if (cnt[i] > maxn)
maxn = cnt[i];
}
else{
k = i, maxn = cnt[i];
}
}
if (maxn < 10)
s[0] = char(cnt[1] + '0'), s[1] = '#';
else
s[k] = char(maxn % 10 + '0'), s[k - 1] = char(maxn / 10 + '0');
for (int i = 0; i < s.size(); i ++)
if (s[i] != '#')
cout << s[i];
cout << endl;
}
}
//考虑两个可能会被hack掉的数:111, 17878, 112, 291

辛辛苦苦调了好久的代码,码了好久的字啊www

Educational Codeforces Round 121 (Rated for Div. 2)——B - Minor Reduction的更多相关文章

  1. Educational Codeforces Round 121 (Rated for Div. 2)——A - Equidistant Letters

    A - Equidistant Letters 题源:https://codeforces.com/contest/1626/problem/A 今天上午VP了这场CF,很遗憾的是一道题也没写出来,原 ...

  2. Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship

    Problem   Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship Time Limit: 2000 mSec P ...

  3. Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)

    Problem   Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec P ...

  4. Educational Codeforces Round 43 (Rated for Div. 2)

    Educational Codeforces Round 43 (Rated for Div. 2) https://codeforces.com/contest/976 A #include< ...

  5. Educational Codeforces Round 35 (Rated for Div. 2)

    Educational Codeforces Round 35 (Rated for Div. 2) https://codeforces.com/contest/911 A 模拟 #include& ...

  6. Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings

    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings 题目连接: http://cod ...

  7. Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes

    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes 题目连接: http://code ...

  8. Educational Codeforces Round 63 (Rated for Div. 2) 题解

    Educational Codeforces Round 63 (Rated for Div. 2)题解 题目链接 A. Reverse a Substring 给出一个字符串,现在可以对这个字符串进 ...

  9. Educational Codeforces Round 39 (Rated for Div. 2) G

    Educational Codeforces Round 39 (Rated for Div. 2) G 题意: 给一个序列\(a_i(1 <= a_i <= 10^{9}),2 < ...

随机推荐

  1. rsync同步文件到远程机器,卡住10多秒--问题解决过程

    背景 以前大体介绍过,我们这边是做运维平台的.如果要形象化理解,那么,比如jenkins这种喜闻乐见的软件大致了解吧,jenkins就经常需要同步文件/版本包到远程机器上,jenkins怎么实现的,没 ...

  2. 数据库原理 之MySQL

    数据库种类: 关系型数据库: mysql 专注于数据安全 和功能 ,存取时 会有表的结构化操作解析sql语句---- 丢给磁盘存取 ----取出,结构化成表 常用关系型数据库产品介绍oracle数据库 ...

  3. myisamchk 是用来做什么的?

    它用来压缩 MyISAM 表,这减少了磁盘或内存使用. MyISAM Static 和 MyISAM Dynamic 有什么区别? 在 MyISAM Static 上的所有字段有固定宽度.动态 MyI ...

  4. MyBatis与Hibernate有哪些不同?

      (1)Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句. (2)Mybatis直接编写原生态sql,可以严格控制sql执行性能,灵活 ...

  5. Linux中redis的redis.conf文件的移动

    Linux中启动redis的过程我想大家都会,但是正常使用redis包目录下启动redis时会出现以下页面: 那么此时只有按ctrl + c退出redis才能使用命令行输入别的命令,这种有点不方便. ...

  6. Tomcat警告之“资源添加到Web应用程序[]的缓存中,因为在清除过期缓存条目后可用空间仍不足 - 请考虑增加缓存的最大空间”

    原因 缓存不够,可以将其缓存调大 解决办法: 在 /conf/context.xml 的 前添加以下内容: <Resources cachingAllowed="true" ...

  7. (stm32f103学习总结)—USART串口通信

    一. USART简介 USART即通用同步异步收发器,它能够灵活地与外部设备进行全双工 数据交换,满足外部设备对工业标准 NRZ 异步串行数据格式的要求. UART即通用异步收发器,它是在USART基 ...

  8. 3_Phase Portrait_相图_相轨迹

  9. InfoQ Trends Report

    InfoQ Trends Report InfoQ Trends Report Culture & Methods Trends Report - March 2021 DevOps and ...

  10. 让弹幕给 PPD 生个孩子

    怎样才能跑起来我写的弹幕程序 资源下载 申请野狗后端云账号注册 创建应用: 复制appId到index.html的 var ref = new Wilddog("https://<ap ...