fork download
  1. import java.util.*;
  2. import java.lang.*;
  3. import java.io.*;
  4.  
  5. class Codechef{
  6. public static void main (String[] args) throws java.lang.Exception
  7. {
  8. Scanner sc=new Scanner(System.in);
  9. int n=sc.nextInt();
  10. int a[]=new int[n];
  11. int b[]=new int[n];
  12. for(int i=0;i<n;i++)a[i]=sc.nextInt();
  13. for(int i=0;i<n;i++)b[i]=sc.nextInt();
  14. int ans=solve(n,a,b);
  15. System.out.println(ans);
  16. }
  17.  
  18. public static int solve(int n,int[]a,int[]b){
  19. HashMap<Integer,Integer>badBond=new HashMap<>();
  20. int g=0;
  21. for(int i=0;i<n;i++){
  22. if(a[i]==b[i]){
  23. badBond.put(a[i],badBond.getOrDefault(a[i],0)+1);
  24. }else{
  25. g++;
  26. }
  27. }
  28. if (badBond.size()==0)return 0;
  29. PriorityQueue<int[]>p=new PriorityQueue<>((r,s)->s[1]-r[1]);
  30. for (var v:badBond.entrySet()) {
  31. p.add(new int[]{v.getKey(),v.getValue()});
  32. }
  33. int swap=0;
  34. while(p.size()>=2){
  35. int[]x=p.poll();
  36. int[]y=p.poll();
  37. x[1]--;y[1]--;
  38. swap++;
  39. if (x[1]>0)p.add(x);
  40. if (y[1]>0)p.add(y);
  41. }
  42. if (p.isEmpty())return swap;
  43. int[]l=p.poll();
  44. int left=l[1],val=l[0],goodB=0;
  45. for(int i=0;i<n;i++){
  46. if(a[i]!=b[i]){
  47. if(a[i]!=val&&b[i]!=val){
  48. goodB++;
  49. }
  50. }
  51. }
  52. if (goodB<left)return -1;
  53. swap+=left;
  54. return swap;
  55. }
  56. }
Success #stdin #stdout 0.17s 54584KB
stdin
5
1 2 1 1 3
1 2 3 1 3
stdout
2