问题很臭很长(跟4.13华为笔试第一题一样)
通俗地讲就是,遍历第二行的每个数(除了计数的第一个数),从第一行中寻找有多少数是包含正在遍历的数的,然后按顺序输出。所谓的顺序有几个要求,第一行的数要按下标,第二行的数要按数本身的大小,并且排除重复的,
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String[] s1 = in.nextLine().split(" ");
String[] s2 = in.nextLine().split(" ");
int n = Integer.parseInt(s1[0]);
int m = Integer.parseInt(s2[0]);
Integer[] a = new Integer[m];
for(int i = 1; i < m + 1; i++){
a[i - 1] = Integer.parseInt(s2[i]);
}
Arrays.sort(a,(o1,o2) -> {return o1 - o2;});
List<List<Integer>> ans = new ArrayList<>();
int cunt = 0;
for(int i = 0; i < m;i++){
if(i > 0 && a[i] == a[i - 1])
continue;
List<Integer> l = new ArrayList<>();
String s = String.valueOf(a[i]);
for(int j = 1; j <= n; j ++){
if(s1[j].indexOf(s) >= 0){
l.add(j);
}
}
cunt += l.size() * 2;
if(l.size() != 0)
cunt += 2;
ans.add(l);
}
System.out.print(cunt + " ");
int j = 0;
for(int i = 0; i < m;i++){
if(i > 0 && a[i] == a[i - 1])
continue;
if(ans.get(j).size() == 0){
j++;
continue;
}
List<Integer> l = ans.get(j);
System.out.print(a[i] + " ");
System.out.print(l.size() + " ");
for(int k:l){
System.out.print(k - 1 + " ");
System.out.print(s1[k] + " ");
}
j++;
}
}
}