博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ACdream 1068
阅读量:5280 次
发布时间:2019-06-14

本文共 1506 字,大约阅读时间需要 5 分钟。

    我没有用二分法,直接构造最小数,既然题目保证答案一定存在那么与上界无关。

    如给定S=16,它能构成的最小数为79,尽量用9补位,最高位为S%9.如果构造的数大于下界A,那么直接输出,因为这是S能构成的最小数;小于下界就要分两种情况了,第一种情况就是A的各位的和P小于S,那么从最低位一直向高位不,最高补9,补不到9,就补能补的最大数;第二种情况就是P大于S,那么就从最高位枚举,看能否补成和A同样的数,如不能立即返回上一位,加1,如果小于9,那么高位确定,剩下的就利用“尽量用9补位,最高位为S%9”的方法构造。

这题还有个坑人的地方,题目并没有说是多数据输入,但是如果用单组数据数据,会WA

AC代码:

#include
#include
const int maxn=23;char a[maxn],b[maxn];int tmp[maxn],ans[maxn],c;int main(){ while(scanf("%s%s%d",a,b,&c)==3){ int lenth=strlen(a); long long x=0; for(int i=0;i
=x) printf("%lld",y); else if(y
=0&&num>0;--i){ if(ans[i]+num>=9){ num-=9-ans[i]; ans[i]=9; } else { ans[i]+=num; num=0; } } if(ans[0]) printf("%d",ans[0]); for(int i=1;i
ans[i]){ num-=tmp[i]-ans[i]; ans[i]=tmp[i]; } if(num<=0){ int k; for(k=i-1;k>=0;--k){ ans[k]++; if(ans[k]<10) break; } ind=k+1; break; } } for(int i=0;i
lenth-1-h/9;--i) ans[i]=9; if(h%9) ans[lenth-1-h/9]=h%9; if(ans[0]) printf("%d",ans[0]); for(int i=1;i
如有不当之处欢迎指出!

转载于:https://www.cnblogs.com/flyawayl/p/8305556.html

你可能感兴趣的文章
java.util.zip压缩打包文件总结一:压缩文件及文件下面的文件夹
查看>>
浅说 apache setenvif_module模块
查看>>
MySQL--数据插入
查看>>
重新学习python系列(二)? WTF?
查看>>
shell脚本统计文件中单词的个数
查看>>
SPCE061A学习笔记
查看>>
sql 函数
查看>>
hdu 2807 The Shortest Path 矩阵
查看>>
熟悉项目需求,要知道产品增删修改了哪些内容,才会更快更准确的在该项目入手。...
查看>>
JavaScript 变量
查看>>
java实用类
查看>>
smarty模板自定义变量
查看>>
研究称90%的癌症由非健康生活习惯导致
查看>>
命令行启动Win7系统操作部分功能
查看>>
排序sort (一)
查看>>
Parrot虚拟机
查看>>
Teamcenter10 step-by-step installation in Linux env-Oracle Server Patch
查看>>
Struts2学习(三)
查看>>
Callable和Runnable和FutureTask
查看>>
GitHub 多人协作开发 三种方式:
查看>>