2016普级组模拟试题(20161114) Closest
来源:互联网 发布:java bigdecimal 加1 编辑:程序博客网 时间:2024/06/07 03:33
Description
考虑两个n位的十进制正整数A和B,都没有前导0。我们需要找到两个最近的靠近A的n位数(第一个比A大或与A相等,第二个严格比A小),使得它们的十进制表示是B中所有数字的某个排列。
比如说,假如A=3022并且B=1232,用B的数字我们可以获得以下的4位数字:1223, 1232, 1322, 2123, 2132, 2213, 2231, 2312, 2321, 3122, 3212和3221。最小的比A大或者和A相等的数,且用B中的数字组成的是3122,并且最大的严格比A小的数是2321。如果A=1232而且B=3022,可能的数字是2023, 2032, 2203, 2230, 2302, 2320, 3022, 3202和3220。在用B中数字组成的数中,最小的比A大或与A相等的数是2023,没有比A小的数。
对于给定的A和B,写一个程序closest找到这些“最靠近A”的数字,或者判断它们中的一个不存在。
Input
输入文件closest.in包含2行:
第1行为一个正整数A。
第1行为一个正整数B。
(A,B均为n位的正整数)
Output
输出文件closest.out共有2行。
第一行:最小的不比A小的n位数,没有前导0,包含B中的所有字符,以某一顺序排列。如果这样的数不存在,那么输出0。
第二行:最大的比A小的n位数,没有前导0,包含B中的所有字符,以某一顺序排列。如果这样的数不存在,那么输出0。
Sample Input
输入样例1
3075
6604
输入样例2
3000203
4562454
Sample Output
输出样例1
4066
0
输出样例2
4244556
2655444
题解
把b中各种数字个数记录下来,从左往右枚举每一位放上比它大的数字,一旦有一位大于它,则后面的数从小到大排序。
代码
var a,g:array[0..9] of longint; t:array[1..100] of longint; s,b:string; f:boolean;procedure mains(x,y:longint);var i:longint;begin if (x-1=length(b))and(f) then begin for i:=1 to x-1 do write(t[i]); writeln; halt; end; if (x-1=length(b))and(not f) then exit; for i:=9 downto 0 do if (a[i]>0)and(f)or(a[i]>0)and(i<=y) then begin if (i=0)and(x=1) then break; if i<y then f:=true; dec(a[i]); t[x]:=i; mains(x+1,ord(s[x+1])-48); inc(a[i]); end;end;procedure main(x,y:longint);var i:longint;begin if x-1=length(b) then begin for i:=1 to x-1 do write(t[i]); writeln; fillchar(t,sizeof(t),0); f:=false;a:=g; mains(1,ord(s[1])-48); writeln(0); halt; end; for i:=0 to 9 do if (a[i]>0)and(f)or(a[i]>0)and(i>=y) then begin if i>y then f:=true; dec(a[i]); t[x]:=i; main(x+1,ord(s[x+1])-48); inc(a[i]); end;end;var i:longint;begin f:=false; readln(s); readln(b); for i:=1 to length(b) do inc(a[ord(b[i])-48]); g:=a; main(1,ord(s[1])-48); writeln(0); fillchar(t,sizeof(t),0); f:=false;a:=g; mains(1,ord(s[1])-48); writeln(0);end.
- 2016普级组模拟试题(20161114) Closest
- 2016普级组模拟试题(20161114) 给出字符串
- 2016普级组模拟试题(20161114) 平台
- Geeks面试题: Closest Pair of Points
- closest
- Closest
- 2016腾讯模拟试题编程第二道
- Geeks面试题: Closest Pair of Points | O(nlogn) Implementation
- 计算机等级考试模拟试题下载
- 三份scjp模拟试题
- 面试模拟试题2
- 编程模拟试题1
- 编程模拟试题2
- 编程模拟试题
- java模拟试题
- mysql 模拟试题一
- 《编译原理》模拟试题
- 模拟电路试题
- Java二分查找
- 平台
- Linux 下 Android Studio 的安装配置
- mvc架构实现商品购买(二)
- js中的onscroll的用法
- 2016普级组模拟试题(20161114) Closest
- 操作系统实践之第二章(LDT的使用)
- 最小生成树的板子--Prim
- 自定义函数内可以使用全局变量吗?答案是不可以,需要关键字global
- MyBatis批量插入数据
- javascript和jQuery获取屏幕宽度和高度
- TrustZone 寄存器相关配置
- 聊聊Linux
- 2016普级组模拟试题(20161114) 给出字符串