ACdream 1068
我没有用二分法,直接构造最小数,既然题目保证答案一定存在那么与上界无关。
如给定S=16,它能构成的最小数为79,尽量用9补位,最高位为S%9.如果构造的数大于下界A,那么直接输出,因为这是S能构成的最小数;小于下界就要分两种情况了,第一种情况就是A的各位的和P小于S,那么从最低位一直向高位不,最高补9,补不到9,就补能补的最大数;第二种情况就是P大于S,那么就从最高位枚举,看能否补成和A同样的数,如不能立即返回上一位,加1,如果小于9,那么高位确定,剩下的就利用“尽量用9补位,最高位为S%9”的方法构造。
这题还有个坑人的地方,题目并没有说是多数据输入,但是如果用单组数据数据,会WA
AC代码:
#include<cstdio> #include<cstring> 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<lenth;++i){ tmp[i+1]=a[i]-'0'; x=x*10+a[i]-'0'; } int num=c; tmp[0]=ans[0]=0; long long y=num%9; for(int i=0;i<num/9;++i) y=y*10+9; if(y>=x) printf("%lld",y); else if(y<x){ int p=0; lenth++; for(int i=1;i<lenth;++i) p+=tmp[i]; if(p<=num){ for(int i=0;i<lenth;++i) ans[i]=tmp[i]; num-=p; for(int i=lenth-1;i>=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<lenth;++i) printf("%d",ans[i]); } else { int h=num,ind; for(int i=0;i<lenth;++i){ ans[i]=0; if(tmp[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<ind;++i) h-=ans[i]; for(int i=ind;i<lenth;++i) ans[i]=0; for(int i=lenth-1;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<lenth;++i) printf("%d",ans[i]); } } printf("\n"); } return 0; }
如有不当之处欢迎指出!
ACdream 1068的更多相关文章
- w3svc服务启动 不了,错误 1068:依赖服务或组件无法启动
win10系统,装了iis就是启动不了,报错误 1068:依赖服务或组件无法启动. 各种实验无法使用,最后如下方法解决 运行命令regedit,打开注册表编辑器,进入:HKEY_LOCAL_MACHI ...
- BZOJ 1068: [SCOI2007]压缩
Sol 区间DP.这个区间DP需要三维, \(f[i][j][k]\) 表示\([i,j]\) 这个区间中是否存在 \(M\) . 转移有两种,一种是这个区间存在 \(M\) ,那么直接枚举 \(M\ ...
- POJ 1068
http://poj.org/problem?id=1068 这道题是一道模拟的题目 题目大意呢,p代表前面的'('的个数,而w代表这个括号所包括的括号的个数: 给你p,要你求w: 解题思路: 首先, ...
- ACdream 1214---矩阵连乘
ACdream 1214---矩阵连乘 Problem Description You might have noticed that there is the new fashion among r ...
- acdream.LCM Challenge(数学推导)
LCM Challenge Time Limit:1000MS Memory Limit:64000KB 64bit IO Format:%lld & %llu Submit ...
- acdream.Triangles(数学推导)
Triangles Time Limit:1000MS Memory Limit:64000KB 64bit IO Format:%lld & %llu Submit Stat ...
- acdream.A Very Easy Triangle Counting Game(数学推导)
A - A Very Easy Triangle Counting Game Time Limit:1000MS Memory Limit:64000KB 64bit IO Forma ...
- acdream.Bet(数学推导)
Bet Time Limit:1000MS Memory Limit:64000KB 64bit IO Format:%lld & %llu Submit Status Pra ...
- acdream.郭式树(数学推导)
郭式树 Time Limit:2000MS Memory Limit:128000KB 64bit IO Format:%lld & %llu Submit Status Pr ...
随机推荐
- Python---多线程(threading)
1. 概述 threading提供线程相关操作,python当前版本的多线程库没有实现优先级.线程组,线程也不能被停止.暂停.恢复和中断 threading提供的类: Thread,Lock,Rloc ...
- Java多线程之线程的控制
Java多线程之线程的控制 线程中的7 种非常重要的状态: 初始New.可运行Runnable.运行Running.阻塞Blocked.锁池lock_pool.等待队列wait_pool.结束Dea ...
- 华人开创NTP网络授时服务器成功投运世界级超大工程港珠澳大桥
华人开创NTP网络授时服务器成功投运世界级超大工程港珠澳大桥 本文由北京华人开创公司提供请勿转载 2017年12月中旬,我华人开创生产研发的NTP网络授时服务器成功投运世界级超大工程港珠澳大桥,为这个 ...
- Bilibili/DanmakuFlameMaster: Android开源弹幕引擎·烈焰弹幕使 ~ JNI source:Bilibili/NativeBitmapFactory
https://github.com/Bilibili/DanmakuFlameMaster
- iOS导出ipa包时四个选项的意义
1. Save for iOS App Store Deployment 保存到本地 准备上传App Store 或者在越狱的iOS设备上使用 2. Save for Ad Hoc Deploymen ...
- FastDFS角色配置参数思维导图
- Core Animation 文档翻译 (第六篇)
高级动画技巧 配置属性动画或者关键帧动画的方式是多种多样的.需要同时执行多个动画或者顺序执行多个动画的APP,可以通过高级的方式同步这些动画的timing或者将这些动画绑定在一起.我们也可以使用其 ...
- 01_什么是数据结构以及C语言指针回顾
一.数据结构是什么 如何把现实中大量而复杂的问题,以特定的数据类型和特定的数据存储结构保存到计算机的存储器中. 数据存储包括两方面:个体存储的集合.个体与个体之间的关系的存储 程序 = 算法 + 数据 ...
- java之静态代理和动态代理
我们以几个问题,来开始我们今天的学习,如果下面几个问题,你都能说出个一二,那么恭喜你,你已经掌握了这方面的知识.1,什么是代理模式?2,Java中,静态代理与动态代理的区别?3,Spring使用的是J ...
- How to fix “HTTP Status Code 505 – HTTP Version Not Supported” error?--转
http://dotnetstock.com/technical/http-status-code-505-http-version-not-supported/ The reason for the ...