Closest

2024-01-29 20:48
文章标签 closest

本文主要是介绍Closest,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

Hint

【限制】
100%的数据满足:1<=n<=60

程序:

vara,b,p,v:array[0..60] of longint;n,i,j,k,u,min,max:longint;s:char;
beginassign(input,'closest.in');assign(output,'closest.out');reset(input);rewrite(output);while not eoln dobegininc(n);read(s);a[n]:=ord(s)-ord('0');end;readln;for i:=1 to n dobeginread(s);b[i]:=ord(s)-ord('0');end;for i:=1 to n-1 dofor j:=i+1 to n doif b[i]>b[j] thenbeginb[0]:=b[i];b[i]:=b[j];b[j]:=b[0];end;for i:=1 to n dobeginmin:=maxlongint;u:=0;for j:=1 to n doif (b[j]<min)and(v[j]=0)and(b[j]>=a[i]) thenbeginmin:=b[j];u:=j;end;if u>0 thenbeginp[i]:=u;v[u]:=i;end;if (min>a[i])and(u>0) thenbeginfor j:=1 to i dowrite(b[p[j]]);for j:=1 to n doif v[j]=0 then write(b[j]);break;end;if u=0 thenbeginfor j:=i-1 downto 1 dobeginv[p[j]]:=0;min:=maxlongint;u:=0;for k:=1 to n doif (v[k]=0)and(b[k]<min)and(b[k]>a[j]) thenbeginmin:=b[k];u:=k;end;if u>0 thenbeginv[u]:=j;p[j]:=u;for k:=1 to j dowrite(b[p[k]]);for k:=1 to n doif v[k]=0 then write(b[k]);break;end;end;if u=0 then write(0);break;end;if i=n thenfor j:=1 to n dowrite(a[j]);end;writeln;fillchar(v,sizeof(v),0);fillchar(p,sizeof(p),0);for i:=1 to n dobeginmax:=-1;u:=0;for j:=1 to n doif (b[j]>max)and(b[j]<=a[i])and(v[j]=0) thenbeginif (i=1)and(b[j]=0) then continue;max:=b[j];u:=j;end;if u>0 thenbeginp[i]:=u;v[u]:=i;end;if (u>0)and(max<a[i]) thenbeginfor j:=1 to i dowrite(b[p[j]]);for j:=n downto 1 doif v[j]=0 then write(b[j]);break;end;if (u=0)or(i=n) thenbeginfor j:=i downto 1 dobeginv[p[j]]:=0;max:=-1;u:=0;for k:=1 to n doif (b[k]>max)and(b[k]<a[j])and(v[k]=0) thenbeginif (j=1)and(b[k]=0) then continue;max:=b[k];u:=k;end;if u>0 thenbeginv[u]:=j;p[j]:=u;for k:=1 to j dowrite(b[p[k]]);for k:=n downto 1 doif v[k]=0 then write(b[k]);break;end;end;if u=0 then write(0);break;end;end;writeln;close(input);close(output);
end.

这篇关于Closest的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/658139

相关文章

LeetCode 16 3Sum Closest

题意: 给出数组s和目标target,要求从中选出3个数字,使其相加的和最接近target。 思路: x sum系列的题目,在这里做一个总结。 最经典的情况为2 sum问题,即给出s和target找出s[i] + s[j] = target。 可以使用枚举s[i]判断target - s[i]是否在s中出现且与s[i]不同的O(nlogn)方法,用map或排序后二分查找的方式均可。

Closest Leaf in a Binary Tree

Input:root = [1,2,3,4,null,null,null,5,null,6], k = 2Diagram of binary tree:1/ \2 3/4/5/6Output: 3Explanation: The leaf node with value 3 (and not the leaf node with value 6) is nearest to the no

3Sum Closest问题及解法

问题描述: Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have

Find K Closest Elements问题及解法

问题描述: Given a sorted array, two integers k and x, find the k closest elements to x in the array. The result should also be sorted in ascending order. If there is a tie, the smaller elements are al

Leetcode 3171. Find Subarray With Bitwise AND Closest to K

Leetcode 3171. Find Subarray With Bitwise AND Closest to K 1. 解题思路2. 代码实现 题目链接:3171. Find Subarray With Bitwise AND Closest to K 1. 解题思路 这道题坦率地说让我感觉很挫败,又一次没有自力搞定,是看了大佬们的答案才搞定的…… 知道比没有搞定更难受的是什么吗?是连

jQuery中的closest()和parents()的区别

jQuery中的closest()和parents()的区别 jQuery中closest()和parents()的作用非常相似,都是向上寻找符合选择器条件的元素,但是他们之间有一些细微的差别,官网也给出了说明: .closest().parents()Begins with the current elementBegins with the parent elementTravels

[LeetCode] 16. 3Sum Closest

题目内容 https://leetcode-cn.com/problems/3sum-closest/ 给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。 题目思路 我用的暴力破解法。先把数组排序好,然后开始定位。先定位好两个数,然后来看第三个数。因为

《leetCode》:3Sum Closest

题目 Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exa

LeedCode·16. 3Sum Closest

题目: Given an array nums of n integers and an integer target, find three integers in nums such that the sum is closest to target. Return the sum of the three integers. You may assume that each input w

ICP算法(Iterative Closest Point)及VTK实现

原文地址:ICP算法(Iterative Closest Point)及VTK实现 作者:小星星恋上大太阳 转载而来 ,自己学的医学图像 ,所以算法原理尚可借鉴,这篇原理讲的很不错 网上搜了很多 始终不明白 似乎这次能知道个来龙去脉了。非常感谢该版主~~~ ICP算法最初由Besl和Mckey提出,是一种基于轮廓特征的点配准方法。基准点在CT图像坐标系及世界坐标系下的坐标点集P =