概述
传送门
题目:
给一个数,只能对相邻两个数字做加法,然后把加后的数取代原来两个数字,求max
思路:
加法后要么一位要么两位
我们优先考虑两位的,两位必然变小
我们希望它不要再高位变小
所以反向遍历有否两位的结果,若有则进行替换并输出
若没有两位的结果,我们被迫选择一位的,一位的总会变大,我们希望最高位变大
因此一位的加法结果只选前两个即可
ac代码:
//
// Created by 009 on 2022/3/8.
//
#include<bits/stdc++.h>
using namespace std;
int main() {
int t;
cin >> t;
while(t--) {
string s;
cin >> s;
// 相加肯定会变小
// 两位数变化更小
// 从右边遍历
// 一位数变大,但位数减少,就看第一个
int n = s.size();
bool flag = false;
for(int i = n - 1; i >= 1; i--) {
int x = s[i] - '0';
int y = s[i - 1] - '0';
int z = x + y;
if(z >= 10) {
s[i - 1] = z / 10 + '0';
s[i] = z % 10 + '0';
flag = true;
cout << s << endl;
break;
}
}
if(flag) continue;
// 没有两位数,被迫减位,从左端开始
int x = s[0] - '0';
int y = s[1] - '0';
int z = x + y;
s.erase(s.begin());
s[0] = z + '0';
cout << s << endl;
}
}
总结:
非常贪心
分析不到位,我也看出来只有一位和两位的加法结果
后面就束手无策了,还是经验不够丰富
继续分类讨论,两位的更好,但会小,所以希望放在后面
实在不行的就一位,放在最前面会变大即可
最后
以上就是朴素电灯胆为你收集整理的【CF1626B】minor reduction的全部内容,希望文章能够帮你解决【CF1626B】minor reduction所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复