题目
题意:原来有n个批吧,第i个的颜色为a[i],需要让第i个变为b[i],现在请来m个画家,每个人只能画一次,且必须按照顺序进行画,求是否能将批吧变成想要的颜色
AC代码:
package 练习;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Scanner;
public class M{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int t=sc.nextInt();
l:while(t-->0) {
StringBuilder sb=new StringBuilder();
int n=sc.nextInt(),m=sc.nextInt(),a[]=new int[n],b[]=new int[n],c[]=new int[m],ans[]=new int[m];
LinkedList<Integer> d[]=new LinkedList[n+1];
d[n]=new LinkedList<Integer>();
for(int i=0;i<n;i++) {
d[i]=new LinkedList<Integer>();
a[i]=sc.nextInt();
}
for(int i=0;i<n;i++) {//d:b中的所有颜色和对应的位置
if((b[i]=sc.nextInt())==a[i]) d[b[i]].add(i);
}
for(int i=0;i<n;i++) {
if(b[i]!=a[i]) d[b[i]].add(i);
}
for(int i=0;i<m;i++) {
c[i]=sc.nextInt();
}
if(d[c[m-1]].isEmpty()) {//判断最后一个是否可以画
System.out.println("NO");
continue;
}
for(int i=m-1;i>-1;i--)
if(d[c[i]].isEmpty()) ans[i]=ans[i+1];
else ans[i]=d[c[i]].pollLast();
for(int i=0;i<m;i++) {
a[ans[i]]=c[i];
sb.append(ans[i]+1+" ");
}
for(int i=0;i<n;i++) if(a[i]!=b[i]) {
System.out.println("NO");
continue l;
}
System.out.println("YES\n"+sb);
}
}
}