tryhardyoninfinityhz

Drought Bronze

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