Codeforces Round #667 (Div. 3) D. Decrease the Sum of Digits (贪心)
2024-08-29 22:01:18
题意:给你一个正整数\(n\),每次可以对\(n\)加一,问最少操作多少次是的\(n\)的所有位数之和不大于\(s\).
题解:\(n\)的某个位置上的数进位,意味这后面的位置都可以被更新为\(0\),所以我们从高位往低位记录一个\(sum\),然后根据情况判断即可.
代码:
int t;
int s;
ll n;
char str[N]; int main() {
//ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
t=read();
while(t--){
scanf("%s",str+1);
s=read(); int len=strlen(str+1);
int cnt=0;
int pos=-1;
ll n=0;
for(int i=1;i<=len;++i){
ll now=str[i]-'0';
n=n*10+now;
}
for(int i=1;i<=len;++i){
cnt+=str[i]-'0';
if(str[i]=='9') continue;
if(cnt<s) pos=i;
} if(cnt<=s){
puts("0");
continue;
} if(pos==-1){
str[1]='1';
for(int i=2;i<=len+1;++i) str[i]='0';
ll tmp=0;
for(int i=1;i<=len+1;++i){
ll now=str[i]-'0';
tmp=tmp*10+now;
}
printf("%lld\n",tmp-n);
continue;
} str[pos]++;
for(int i=pos+1;i<=len;++i) str[i]='0';
ll tmp=0;
for(int i=1;i<=len;++i){
ll now=str[i]-'0';
tmp=tmp*10+now;
}
printf("%lld\n",tmp-n);
} return 0;
}
最新文章
- [Android]电话拨号器开发
- js 获取根目录 获取参数
- Groonga 3.0.8 发布,全文搜索引擎
- WinForm------TreeList实现鼠标经过节点背景色改变
- 学习lamda表达式
- GCC常用参数
- 无法绑定到新的显示成员,参数名:newDisplayMember
- 最近Get到的一些HTML/CSS中的小点(一)
- sql基础,必须会的————随便整理、杂乱无章
- Pdf文件处理组件对比(Aspose.Pdf,Spire.Pdf,iText7)
- vue项目实现记住密码到cookie功能(附源码)
- hi3531 SDK 编译 kernel, 修改 参数
- L1-Day9
- (九)逻辑运算,order by,desc
- Java笔记——泛型擦除
- python框架之Django(14)-rest_framework模块
- 【原创】Linux常用命令记录
- Linux基础第四课——文件操作
- BZOJ 4671 异或图 | 线性基 容斥 DFS
- Android样式的开发:selector篇