首页 > 其他分享 >CF1857B Maximum Rounding 题解

CF1857B Maximum Rounding 题解

时间:2023-08-09 11:45:21浏览次数:42  
标签:maxx bullet Rounding 题解 等于 位数 CF1857B 最高 进位

题面

题目大意

给定 \(T\) 组数据,每组数据一个自然数 \(n\),可以多次选择第 \(k\) 位数进行四舍五入,求出四舍五入后该数的最大值。

分析思路

思想:贪心

这里给定了两种操作。四舍和五入。显然我们想要让最终的结果最大,我们的操作只能进行五入不可以进行四舍。因为如果我们进行了四舍,第 \(k\) 位如果小于等于 \(4\),那么这一位将要变成 \(0\),相对于原数反而变小了,这显然不是我们想要的结果。

代码实现

为了方便进位的操作,我们用字符数组来存储输入的数字,再将数组反转过来转换到整型数组。然后对数组进行一次遍历,若当前数位上的数大于或等于 \(5\),就将下一位的数 \(+1\),表示进了一位。我们再用一个变量 \(maxx\) 记录当前可以进位的最高位,\(maxx\) 初始为 \(-1\)。

我们经过观察可以发现:若一个数有进位,那么最高进位的那一位上所有前面的位数都是不变的,后面的位数都是等于 \(0\) 的。例如:\(419860\),最高进位数为 \(k=4\) 那么第五位 \(4\) 不变,最高进位的数 \(+1\) 等于 \(2\),后面的数全部为 \(0\),所以最终的结果为 \(420000\),那么我们的代码也可以模拟这种方式进行书写。

我们这里分四种情况讨论。

\(\bullet\) 当这个数一位都没有进位时(即遍历完后 \(maxx\) 仍然等于 \(-1\)),直接输出原数。

\(\bullet\) 当这个数的进位在最高位上且最高位之前是 \(9\),现在又进了一位时。

\(\bullet\) 当这个数的进位在最高位上且最高位没有再进位时。
(理论上来说第二种和第三种差别不大,都是输出最高位然后后面补 \(0\),但代码上稍微有点出入,请看下面的代码。)

\(\bullet\) 当这个数的进位在中间的位数时。进位的位数前面的所有数按原数输出,后面的所有数补 \(0\) 即可。

核心代码:

cin >> s;
int len = s.length();
for (int i = 0;i <= len - 1;i++){ //将字符串翻转过来存入整型数组 。 
	arr[i] = s[len - i - 1] - '0';
}
int maxx = -1;
for (int i = 0;i <= len - 1;i++){ //遍历数组,寻找可以五入的位数。 
	if (arr[i] >= 5){
		arr[i + 1]++; //如果当前位数大于等于5,那么五入,即下一位 +1。 
		maxx = i + 1; //更新最高进位的位数。 
	} 
}
if (maxx == -1){ //第一种情况。 
	for (int i = 0;i <= len - 1;i++){
		printf("%lld",arr[len - i - 1]);
	} 
	printf("\n");
}
else if (maxx == len){ //第二种情况。 
	printf("%lld",arr[maxx]);
	for (int i = 0;i <= len - 1;i++){
		printf("0");
	}
	printf("\n");
}
else if (maxx == len - 1){ //第三种情况。 
	printf("%lld",arr[maxx]);
	for (int i = 0;i <= len - 2;i++){
		printf("0");
	}
	printf("\n");
}
else { //第四种情况。 
	for (int i = 0;i <= len - maxx - 2;i++){
		printf("%lld",arr[len - i - 1]);
	}
	printf("%lld",arr[maxx]);
	for (int i = 0;i <= len - (len - maxx - 2) - 3;i++){
		printf("0");
	}
	printf("\n");
}

此题难度大约在 普及- 左右。

标签:maxx,bullet,Rounding,题解,等于,位数,CF1857B,最高,进位
From: https://www.cnblogs.com/WiuehPlus/p/17616438.html

相关文章

  • 国标GB28181视频平台LntonGBS(源码版)国标平台级联时,通道上传上级宇视平台无法接收的问
    LntonGBS是基于公安部推出的GB/T28181协议开发的视频平台,在安防监控领域应用广泛。下面是一些关于LntonGBS平台的主要特点:GB/T28181协议兼容性、视频直播和转码、云端录像和存储、语音对讲和警告功能、平台级联功能。通过以上的功能和特点,LntonGBS平台能够满足安防监控领域各类场景......
  • sudo: a terminal is required to read the password; either use..... 问题解决方法
    转载自:sudo:aterminalisrequiredtoreadthepassword;eitheruse……问题解决方法_akaiziyou的博客-CSDN博客问题sudo:aterminalisrequiredtoreadthepassword;eitherusethe-Soptiontoreadfromstandardinorconfigureanaskpasshelper出现场景某个......
  • Codeforces Round 891 (Div. 3) 题解
    A.ArrayColoring因为:偶数+偶数=偶数奇数+奇数=偶数奇数+偶数=奇数所以设\(s1\)为奇数之和,\(s2\)为偶数之和\(s2\)必定是偶数如果奇数的个数为偶数,则\(s1\)为偶数;否则是奇数而在\(s1\)为奇数时,即使拿一个奇数加到\(s2\)里,那么也是不合法的所以直接判断奇数的......
  • CF1477E题解
    洛谷博客链接此篇未投洛谷题解,因为写得太菜了qwq。CF1477E&大户爱的送分题题解(CF1477E为我出的校内模拟赛的一道题——《大户爱的送分题》的待修版本)大户爱的送分题文件名OhtoAiFirst.cpp/.in/.out,时间限制\(1\)秒,空间限制\(256MB\)。注意第一个字母是O而不是0。题目背......
  • CF1030F题解
    CF1030F题解传送门 更好的阅读体验简化题意:有$n$个小球,每个小球在位置$a_i$,移动一格的代价是$w_i$,有两种操作,一种是将$w_x$改成$y$,一种是查询$\min\limits_{x=1}^n\{\sum\limits_{i=l}^rw_i\times(|a_x-a_i|+|x-i|)\}$。思路很好的线段树二分练手题。对于每......
  • CF1239E 题解
    CF1239E给定\(2n\)个数,将其重排成\(2\timesn\)的矩阵,最小化:从\((1,1)\)走到\((2,n)\),只可向右下走的所有方案中,途径所有数的和的最大值。\(n\le25,|V|\le5\times10^4\)。考场上有个\(n\le10\)的包,分值高达\(40\)。注意到\(\binom{20}{10}\approx10^5\)可枚......
  • 2023年 8月7日普及组南外集训题解
    A国家集训队题解注意数据已经是有序的,我还搞了个排序,我是智障所以只需要将第5个人到第16个人的成绩都预设成300,再把前4个人的成绩都预设成0,再看有没有人能超过第4个人就行了ac代码#include<iostream>usingnamespacestd;constintN=20;inta[N],ans=4;intmain(......
  • 2023年百度之星程序设计竞赛初赛1题解
    每次出题都出其不意---->群友蓝桥国三ac一道题根据官方的视频题解整理依据难度的划分第五题:促销糖果 分析:从答案出发想吃K个糖果,必定有k个糖纸,考虑换购,则有一张糖纸是不可以换的(因为你必须至少要买一颗糖果)则换购的数量为(k-1)/减去换购的糖果则是买的糖果packageLi2209;i......
  • CodeForces CF1846G 题解
    CodeForcesCF1846G题解CodeForces题目链接洛谷题目链接标准答案是状压之后,转化成Dijkstra算法跑最短路。我这里提供一个不一样的思路。题意简述主人公得了病,有部分类型的症状。所有类型症状共有\(n\)种,用长为\(n\)的01串表示是否有那种症状。共有\(m\)种药,吃......
  • 【BZOJ 3364】Distance Queries 距离咨询 题解
    原题简化题意:有一棵\(n\)个点的树,\(q\)组询问,每次询问回答两点间的距离。令\(dis[i][j]\)表示\(i\)到\(j\)的距离,根节点为\(rt\),则有\(dis[i][j]=dis[rt][i]+dis[rt][j]-2×dis[rt][lca(i,j)]\),按照题意打即可。#include<bits/stdc++.h>usingnamespacestd;#d......