tryhardyoninfinityhz

Untitled

Feb 7th, 2022
1,451
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.60 KB | None | 0 0
  1. import java.util.*;
  2. public class p3 {
  3.     static class maxmin{
  4.         int max;
  5.         int min;
  6.     }
  7.     public static boolean allsame(int array[]) {
  8.         int n = array.length;
  9.         for(int i = 0; i < n - 1; i++) {
  10.             if(array[i] != array[i + 1]) {
  11.                 return false;
  12.             }
  13.             else {
  14.                 //System.out.println(array[i]+ " " + array[i + 1]);
  15.             }
  16.         }
  17.         //System.out.println(array.length);
  18.         return true;
  19.     }
  20.     public static boolean noNeg(int arr[]){
  21.         for(int i = 0; i < arr.length; i++) {
  22.             if(arr[i] != Math.abs(arr[i])) {
  23.                 return false;
  24.             }
  25.         }
  26.         return true;
  27.     }
  28.     public static maxmin max(int array[]) {
  29.         int n = array.length;
  30.         int max = -1;
  31.         maxmin maxmin = new maxmin();
  32.         int index = -1;
  33.         int min = Integer.MAX_VALUE;
  34.         int ind2 = -1;
  35.         for(int i = 0; i < n; i++) {
  36.             if(max < array[i]) {
  37.                 index = i;
  38.                 max = array[i];
  39.             }
  40.             if(min > array[i]) {
  41.                 ind2 = i;
  42.                 min = array[i];
  43.             }
  44.         }
  45.         maxmin.max = index;
  46.         maxmin.min = ind2;
  47.         return maxmin;
  48.     }
  49.     public static void main(String [] args) {
  50.         Scanner scan = new Scanner(System.in);
  51.         int testcases = scan.nextInt();
  52.         for(int testcase = 0; testcase < testcases; testcase++) {
  53.             int n = scan.nextInt();
  54.             int hunger[] = new int[n];
  55.             for(int i = 0; i < n; i++) {
  56.                 hunger[i] = scan.nextInt();
  57.             }
  58.             long ans = 0;
  59.             while(!allsame(hunger) && noNeg(hunger)){
  60.                 maxmin maxmin = max(hunger);
  61.                 int max = maxmin.max;
  62.                 int preMin = maxmin.min;
  63.                 int min = maxmin.min;
  64.                 int preMax = max;
  65.                 if(max == 0) {
  66.                     while(min == preMin && noNeg(hunger) && max == preMax){
  67.                         hunger[max]--;
  68.                         hunger[max + 1]--;
  69.                         ans += 2;
  70.                         maxmin = max(hunger);
  71.                         min = maxmin.min;
  72.                         max = maxmin.max;
  73.                     }
  74.                 }
  75.                 else if(max == n - 1) {
  76.                     while(min == preMin && noNeg(hunger) && max == preMax){
  77.                         hunger[max]--;
  78.                         hunger[max - 1]--;
  79.                         ans+=2;
  80.                         maxmin = max(hunger);
  81.                         max = maxmin.max;
  82.                         min = maxmin.min;
  83.                     }
  84.                 }
  85.                 else if(max != 0 && max!= n-1){
  86.                     //find largest adjacent node
  87.                    
  88.                     while(min == preMin && noNeg(hunger) && max == preMax) {
  89.                         int ind = 0;
  90.                         if(hunger[max - 1] < hunger[max + 1]) {
  91.                             ind = max + 1;
  92.                         }
  93.                         else {
  94.                             ind = max - 1;
  95.                         }
  96.                         hunger[max]--;
  97.                         hunger[ind]--;
  98.                         maxmin = max(hunger);
  99.                         max = maxmin.max;
  100.                         min = maxmin.min;
  101.                         ans+= 2;
  102.                     }
  103.                 }
  104. //              for(int i = 0; i < n; i++) {
  105. //              System.out.print(hunger[i] + " ");
  106. //              }
  107. //              System.out.println();
  108.                 if(!noNeg(hunger)) {
  109.                     ans = -1;
  110.                     break;
  111.                 }
  112.             }
  113.             System.out.println(ans);
  114.         }
  115.     }
  116. }
  117.  
Advertisement
Add Comment
Please, Sign In to add comment