SSL P2574 Closest
来源:互联网 发布:淘宝显示历史价格 编辑:程序博客网 时间:2024/05/22 20:29
题目大意:
考虑两个n位的十进制正整数A和B,都没有前导0。我们需要找到两个最近的靠近A的n位数(第一个比A大或与A相等,第二个严格比A小),使得它们的十进制表示是B中所有数字的某个排列。
对于给定的A和B,写一个程序closest找到这些“最靠近A”的数字,或者判断它们中的一个不存在,不存在则输出0。
题解:
对于>=A且最小的数
对于一个数,我们肯定是优先它每一位是等于的情况,如果不行,就进一步枚举,如果当前的答案ans,
找到了第i位:
那么 i-1前如果是完全等于N的前i-1位,则这一位只能从n[i]~9去找,否则就从0~9去找。
同理,
对于
var num:array ['0'..'9'] of longint; i:longint; n,m:string; flag:boolean;procedure dfs(dep:longint;ans:string;d:boolean);var i,j,k:char;begin if dep>length(n) then begin if ans>=n then exit; writeln(ans); flag:=true; exit; end; if d then j:=n[dep] else j:='9'; if dep=1 then k:='1' else k:='0'; for i:=j downto k do if num[i]<>0 then begin dec(num[i]); if (i=n[dep]) and (d) then dfs(dep+1,ans+i,true) else dfs(dep+1,ans+i,false); inc(num[i]); if flag then break; end;end;procedure find(dep:longint;ans:string;d:boolean);var i,j,k:char;begin if dep>length(n) then begin if ans<n then exit; writeln(ans); flag:=true; exit; end; if d then j:=n[dep] else j:='0'; if dep=1 then if j='0' then j:='1'; for i:=j to '9' do if num[i]<>0 then begin dec(num[i]); if (i=n[dep]) and (d) then find(dep+1,ans+i,true) else find(dep+1,ans+i,false); inc(num[i]); if flag then break; end;end;begin readln(n); readln(m); for i:=1 to length(m) do inc(num[m[i]]); flag:=false; find(1,'',true); if not(flag) then writeln('0'); flag:=false; dfs(1,'',true); if not(flag) then writeln('0'); end.
阅读全文
1 0
- SSL P2574 Closest
- 洛谷 P2574 XOR的艺术
- 洛谷P2574 XOR的艺术
- closest
- Closest
- 洛谷 P2574 XOR的艺术(xor)
- SSL
- SSL
- ssl
- SSL
- ssl
- ssl
- SSL
- SSL
- SSL
- ssl
- SSL
- ssl
- Ruijie—Telnet控制交换机
- HPUoj 1415: 小ho的01串 [字符串]
- ffmpeg + nginx + rtmp 搭建本地直播服务器
- 利比亚行动
- Populating Next Right Pointers in Each Node问题及解法
- SSL P2574 Closest
- 【usaco】learning
- could not read data from '/Users/xxxx/xxxx/Info.plist': The file “Info.plist” couldn’t be opened
- bzoj 2820 莫比乌斯反演
- 逻辑卷管理pv,vg,lv
- 开发人员必知的5种开源框架
- mysql外键的优缺点和使用
- C语言存储空间布局以及static解析
- SSL P2575 给出字符串