首页 > 其他分享 >CF1409D题解

CF1409D题解

时间:2024-01-15 22:22:43浏览次数:31  
标签:tmp -- 题解 sum long int ans CF1409D

思路

因为数据较大,使用字符串读入。

考虑使用贪心。

先统计出当前数码之和。然后从低位往高位枚举,看一下把当前位改了之后是否小于等于 \(s\)。如果小于的话,则统计出把当前位往后所有位都改为 0,\(k\) 为多少,求出的 \(k\) 就是最优解。

说明一下为什么要从低位往高位枚举,这样如果成功改好,那么答案一定是最小的。

注意:

  • 进位的地方可能有些麻烦,可以根据个人写法改变。

  • 注意判断前导 0。

AC CODE

#include<bits/stdc++.h>
using namespace std;
int n;
vector<int>ans;
signed main(){
	int T;
	cin>>T;
	while(T--){
		string s;
		long long f=0;
		cin>>s>>f;
		long long sum=0;
		for(int i=0;i<s.size();i++){
			sum+=s[i]-'0';
		}
		if(sum<=f){
			cout<<0<<endl;
			continue;
		}
		for(int i=s.size()-1;i>=0;i--){
			if(s[i]=='0')continue;
			sum-=(s[i]-'0');
			if(sum+1<=f){
				int tmp=9;
				if(s[s.size()-1]!='0')ans.push_back(10-(s[s.size()-1]-'0'));
				else ans.push_back(0),tmp=10;
				for(int j=s.size()-2;j>=i;j--){
					if(s[j]=='0'&&tmp==10)ans.push_back(0),tmp=10;
					else ans.push_back(tmp-(s[j]-'0')),tmp=9;
				}
				break;
			}
		}
		bool ok=1;
		reverse(ans.begin(),ans.end());
		for(auto x:ans){
			if(x==0&&ok)continue;
			cout<<x;
			ok=0;
		}
		cout<<endl;
		ans.clear();
	}
	return 0;
}

标签:tmp,--,题解,sum,long,int,ans,CF1409D
From: https://www.cnblogs.com/xdh2012/p/17966542

相关文章

  • AT_arc060_c题解
    纪念模拟考考挂。思路首先二分查找出当前点往后走最远能去哪个点,当前点为\(i\),记最远能去的那个点为\(nt_i\)。考虑建一棵树,将\(nt_i\)设为\(i\)点的父节点。暴力的话直接从当前点往上找,找到目标节点看几次就好了。但显然是过不了的。考虑使用倍增优化。设\(g_{i,j}......
  • 1.15模拟赛 T2题解
    简要题意多重背包但是乘法思路暴力就直接跑背包考虑乘法能否变为加法,可以找到模数的原根,将每个数映射一下,这样乘法就变成了加法,可以直接\(\text{bitset}\)优化,但是暴力这样做还是过不了于是我们考虑二进制分组优化背包,这样复杂度貌似就对了?code#pragmaGCCoptimize("Ofast......
  • border设置渐变boder-radius不生效问题解决方案
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metahttp-equiv="X-UA-Compatible"content="IE=edge"/><metaname="viewport"c......
  • 【题解】gym103743 (2022 JSCPC)
    A.PENTAKILL!考虑直接模拟,规则就是一个人将其他人全部都击杀,并且中间没有重复击杀。code:#include<bits/stdc++.h>usingnamespacestd;map<string,vector<string>>st;intn;stringa,b;intmain(){cin>>n;for(inti=1;i<=n;++i){ci......
  • 题解「JOI 2014 Final」IOI 馒头
    传送门。题意有\(n\)个物品,\(m\)个背包。第\(i\)个物品的价值是\(P_i\),第\(j\)个背包可以装\(C_i\)个物品,但会消耗\(E_i\)的价值。背包不能重复买,问最多可以获得多少价值。分析首先一个简单的贪心,我们在购买背包后塞入物品,一定时从大往小塞,也就是说,我们可以先对......
  • abc336 E - Digit Sum Divisible 题解 数位DP
    题目链接:https://atcoder.jp/contests/abc336/tasks/abc336_e题目大意:我们定义一个整数\(n\)的数位和为\(n\)的十进制表示中的各位上的数字之和。比如:整数\(2024\)的数位和为\(2+0+2+4=8\)。一个正整数\(n\)被称作一个好数如果\(n\)能被它的数位和整除......
  • CF1818B ndivisible 题解
    题意简述构造一个长度为\(n\)的排列\(A\),使得对于任意的\(l,r\)(\(1\lel<r\len\))都满足\(A_l+A_{l+1}+⋯+A_r\)不可以被\(r-l+1\)整除。输出其中一种合法排列即可。解题思路构造题。考虑对\(n\)进行分类讨论:当\(n=1\)时,由样例即可得合法排列为\(1\)......
  • P6021 洪水 题解
    请先完成ddp模板一个ddp讲解视频Part0:题意解释感觉题面太阴间了。所以解释一下:Cxt表示把\(x\)结点的权值改为\(t\).Qx:把\(x\)子树中一些结点删去,使得\(x\)与\(x\)子树内所有叶子结点不连通。求删去的结点权值和的最小值。Part1:先不考虑修改操作发现原......
  • electron安装卡住问题解决
    问题安装electron会卡住,你换镜像,挂梯子都没有用。解决办法自己配置下载electron二进制文件的地址解决步骤npmconfigls进入该配置文件,手动添加ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/electron_mirror=npm.taobao.org这两行重新npminstallele......
  • Codeforces Round 919 (Div. 2)(A~D) 题解
    CodeforcesRound919(Div.2)(A~D)题解A.SatisfyingConstraints题意:给你一些条件让你求出满足条件的整数有多少个。模拟即可。#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constllMAXN=2e5+5;llTex=1,n;voidAC(){ cin>>n; lll=......