Advertisement
paranid5

19.06 27

Jun 19th, 2022
928
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.13 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.FileReader;
  3. import java.io.IOException;
  4. import java.util.ArrayList;
  5. import java.util.Objects;
  6. import java.util.stream.Collectors;
  7.  
  8. public enum Main {;
  9.     static final class Pair<F, S> {
  10.         F first;
  11.         S second;
  12.  
  13.         public Pair(final F first, final S second) {
  14.             this.first = first;
  15.             this.second = second;
  16.         }
  17.  
  18.         @Override
  19.         public boolean equals(final Object o) {
  20.             if (this == o) return true;
  21.             if (o == null || this.getClass() != o.getClass()) return false;
  22.             final Pair<?, ?> pair = (Pair<?, ?>) o;
  23.             return this.first.equals(pair.first) && this.second.equals(pair.second);
  24.         }
  25.  
  26.         @Override
  27.         public int hashCode() {
  28.             return Objects.hash(this.first, this.second);
  29.         }
  30.  
  31.         @Override
  32.         public String toString() {
  33.             return "Pair{" +
  34.                     "first=" + first +
  35.                     ", second=" + second +
  36.                     '}';
  37.         }
  38.     }
  39.  
  40.     public static final void main(final String[] args) throws IOException {
  41.         try (final var reader = new BufferedReader(new FileReader("kek.txt"))) {
  42.             final var nums = reader
  43.                     .lines()
  44.                     .skip(1L)
  45.                     .map(Integer::parseInt)
  46.                     .map(x -> x * 3)
  47.                     .collect(Collectors.toList());
  48.  
  49.             final var totalSums = new long[nums.size()];
  50.             final var leftAndRightSums = new ArrayList<Pair<Long, Long>>(nums.size());
  51.  
  52.             for (int i = 0; i < nums.size(); i++)
  53.                 leftAndRightSums.add(new Pair<>(0L, 0L));
  54.  
  55.             final int mid = nums.size() / 2;
  56.  
  57.             for (int i = 0; i < mid; i++)
  58.                 leftAndRightSums.get(0).second += nums.get(i);
  59.  
  60.             for (int i = mid; i < nums.size(); i++)
  61.                 leftAndRightSums.get(0).first += nums.get(i);
  62.  
  63.             for (int i = 0; i < mid; i++)
  64.                 totalSums[0] += (long) nums.get(i) * (long) i;
  65.  
  66.             for (int i = mid, mul = mid; i < nums.size(); i++, mul--)
  67.                 totalSums[0] += (long) nums.get(i) * (long) mul;
  68.  
  69.             for (int i = 1; i < mid; i++) {
  70.                 final var dif = (long) (nums.get(i - 1) - nums.get((i + mid - 1) % nums.size()));
  71.                 leftAndRightSums.get(i).second = leftAndRightSums.get(i - 1).second - dif;
  72.                 leftAndRightSums.get(i).first = leftAndRightSums.get(i - 1).first + dif;
  73.             }
  74.  
  75.             for (int i = mid; i < nums.size(); i++) {
  76.                 leftAndRightSums.get(i).first = leftAndRightSums.get(i - mid).second;
  77.                 leftAndRightSums.get(i).second = leftAndRightSums.get(i - mid).first;
  78.             }
  79.  
  80.             var minSum = totalSums[0];
  81.  
  82.             for (int i = 1; i < nums.size(); i++) {
  83.                 totalSums[i] = totalSums[i - 1] + leftAndRightSums.get(i).first - leftAndRightSums.get(i).second;
  84.                 minSum = Math.min(minSum, totalSums[i]);
  85.             }
  86.  
  87.             System.out.println(minSum);
  88.         }
  89.     }
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement