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. 5月31日 python学习总结 JavaScript概述

    JavaScript概述 ECMAScript和JavaScript的关系 1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECM ...

  2. Discuz 7.x、6.x 全局变量防御绕过导致代码执行

    0x01 分析 由于php5.3.x版本里php.ini的设置里request_order默认值为GP,导致REQUEST中不再包含_REQUEST中不再包含R​EQUEST中不再包含_COOKIE, ...

  3. 【网鼎杯2020白虎组】Web WriteUp [picdown]

    picdown 抓包发现存在文件包含漏洞: 在main.py下面暴露的flask的源代码 from flask import Flask, Response, render_template, req ...

  4. sql注入mysql注入

    #跨库查询及应用思路 information_schema表特性,记录数据库名.表名.列名对应表 information_schema.schemata:存储所有数据库名 schema_name:数据 ...

  5. Clickhouse上用Order By保证绝对正确结果但代价是性能

    一些聚合函数的结果跟流入数据的顺序有关,CH文档明确说明这样的函数的结果是不确定的.这是为什么呢?让我们用explain pipeline来一探究竟. 以一个很简单的查询为例: select any( ...

  6. unittest 测试用例实现

    unittest框架结构 test_case: 测试套件,每一个.py文件代表一个测试用例,测试用例以test开头,否则框架读取不到测试用例 __init__.py是做什么的? 要弄明白这个问题,首先 ...

  7. Flutter查漏补缺1

    Flutter 基础知识查漏补缺 Hot reload原理 热重载分为这几个步骤 扫描项目改动:检查是否有新增,删除或者改动,直到找到上次编译后发生改变的dart代码 增量编译:找到改变的dart代码 ...

  8. babel和polyfill?

    Babel: Babel 是一个广泛使用的 ES6 转码器,可以将 ES6 代码转为 ES5 代码.注意:Babel 默认只转换新的 JavaScript 句法(syntax),而不转换新的 API ...

  9. Anonymous Inner Class(匿名内部类)是否可以继承其它类?是否可以实现接口?

    可以继承其他类或实现其他接口,在 Swing 编程和 Android 开发中常用此方式来 实现事件监听和回调.

  10. redis 如何做内存优化?

    1.缩减键值对象 缩减键(key)和值(value)的长度, key长度:如在设计键时,在完整描述业务情况下,键值越短越好. value长度:值对象缩减比较复杂,常见需求是把业务对象序列化成二进制数组 ...