给定一个长度为 n 的数组 A1,A2,⋅⋅⋅,An。
你可以从中选出两个数 Ai 和 Aj(i 不等于 j),然后将 Ai 和 Aj 一前一后拼成一个新的整数。
例如 12 和 345 可以拼成 12345 或 34512。
注意交换 Ai 和 Aj 的顺序总是被视为 2 种拼法,即便是 Ai=Aj 时。
请你计算有多少种拼法满足拼出的整数小于等于 K。
输入格式
第一行包含 2 个整数 n 和 K。第二行包含 n 个整数 A1,A2,⋅⋅⋅,An。
输出格式
一个整数代表答案。数据范围
1≤n≤10^5,
1≤K≤10^10,
1≤Ai≤10^9
输入样例:
4 33
1 2 3 4
输出样例:
8
代码如下:
import java.util.Scanner; public class Main{ public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int k=sc.nextInt(); int[] a=new int[n]; for(int i=0;i<a.length;i++) { a[i]=sc.nextInt(); } int count=0; //正向拼接 for(int i=0;i<a.length;i++) { for(int j=i+1;j<a.length;j++) { if(i!=j) { String x=""+a[i]+a[j]; if(Integer.parseInt(x)<=k) { count++; } } } } //反向拼接 for(int i=0;i<a.length;i++) { for(int j=i+1;j<a.length;j++) { if(i!=j) { String x=""+a[j]+a[i]; if(Integer.parseInt(x)<=k) { count++; } } } } System.out.println(count); } }
运行结果如下: