Submission #1543798


Source Code Expand

/**
 * @author Finn Lidbetter
 */
import java.util.*;
import java.io.*;
import java.awt.geom.*;

public class Main {
  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    StringBuilder sb = new StringBuilder();

    String[] s = br.readLine().split(" ");
    long x1 = Integer.parseInt(s[0]);
    long y1 = Integer.parseInt(s[1]);
    long x2 = Integer.parseInt(s[2]);
    long y2 = Integer.parseInt(s[3]);
    if (x1>x2 || (x1==x2 && y2<y1)) {
      long tmp = x2;
      x2 = x1;
      x1 = tmp;
      tmp = y2;
      y2 = y1;
      y1 = tmp;
    }
    boolean normalise = false;
    if (y2<y1) {
      y2 = y1 + (y1-y2);
      normalise = true;
    }
    int n = Integer.parseInt(br.readLine());
    Pair[] pairs = new Pair[n];
    int index = 0;
    for (int i=0; i<n; i++) {
      s = br.readLine().split(" ");
      long x = Long.parseLong(s[0]);
      long y = Long.parseLong(s[1]);
      if (normalise) {
        if (y>y1) {
          y = y1 - (y-y1);
        } else {
          y = y1 + (y1-y);
        }
      }
      if (x>=x1 && x<=x2 && y>=y1 && y<=y2) {
        pairs[index] = new Pair(x,y);
        index++;
      }
    }
    int nGood = index;
    if (nGood==0) {
      System.out.println((long)(x2-x1 + y2-y1)*(long)100);
      return;
    } 
    Pair[] pairs2 = new Pair[nGood];
    for (int i=0; i<nGood; i++) {
      pairs2[i] = new Pair(pairs[i].x,pairs[i].y);
    }
    Arrays.sort(pairs2);
    List<Long> seq = new ArrayList<Long>(nGood);
    
    for (int i=0; i<nGood; i++) {
      seq.add(pairs2[i].y);
    }
    

    List<Integer> lis = longestIncreasingSubsequence(seq);
    long len = lis.size();
    long dx = x2-x1;
    long dy = y2-y1;
    long min = Math.min(dx,dy);
    double ans = 0;
    if (min==0 && len==1) {
      ans = dx*100L + dy*100L - 20 + Math.PI*10.0;
    } else if (len>min) {
      ans = dx*100L + dy*100L - 20*(len-1) + Math.PI*(5L*(len-1));
      ans -= 20;
      ans += Math.PI*10.0;
    } else {
      ans = dx*100L + dy*100L - 20*len + Math.PI*(5L*len);
    }
    System.out.println(ans);

  }
  static <T extends Comparable<? super T>> List<Integer> longestIncreasingSubsequence(List<T> seq) {
    if (seq.size() == 0) return new ArrayList<Integer>();
    List<Integer> a = new ArrayList<>(), parent = new ArrayList<>();
    for (int i = 0; i < seq.size(); i++) parent.add(null);
    for (int i = 0; i < seq.size(); i++) {
      if (a.size() == 0 || seq.get(i).compareTo(seq.get(a.get(a.size() - 1))) > 0) {
        if (a.size() > 0) { parent.set(i, a.get(a.size() - 1)); } a.add(i);
      } else { int index = findNext(seq, a, i); a.set(index, i); if (index != 0) parent.set(i, a.get(index - 1)); } }
    List<Integer> result = new ArrayList<>(); Integer cur = a.get(a.size() - 1);
    while (cur != null) { result.add(cur); cur = parent.get(cur); }
    Collections.reverse(result); return result; }
  static <T extends Comparable <? super T>> int findNext(List <T> c, List<Integer> d, int e) {
    int a = 0, b = d.size() - 1;
    while (b > a) { int mid = (b + a) / 2; if (c.get(d.get(mid)).compareTo(c.get(e)) < 0) a = mid + 1; else b = mid; }
    return b;
  }

}
class Pair implements Comparable<Pair> {
  long x;
  long y;
  public Pair(long xx, long yy) {
    x = xx;
    y = yy;
  }
  public int compareTo(Pair p2) {
    return (int)Math.signum(x-p2.x);
  }
  public String toString() {
    return String.format("(%d,%d)",x,y);
  }
}

Submission Info

Submission Time
Task C - Fountain Walk
User FinnLidbetter
Language Java8 (OpenJDK 1.8.0)
Score 900
Code Size 3604 Byte
Status AC
Exec Time 824 ms
Memory 81232 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 900 / 900
Status
AC × 3
AC × 47
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
All sample_01.txt, sample_02.txt, sample_03.txt, sample_01.txt, sample_02.txt, sample_03.txt, subtask_1_01.txt, subtask_1_02.txt, subtask_1_03.txt, subtask_1_04.txt, subtask_1_05.txt, subtask_1_06.txt, subtask_1_07.txt, subtask_1_08.txt, subtask_1_09.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_12.txt, subtask_1_13.txt, subtask_1_14.txt, subtask_1_15.txt, subtask_1_16.txt, subtask_1_17.txt, subtask_1_18.txt, subtask_1_19.txt, subtask_1_20.txt, subtask_1_21.txt, subtask_1_22.txt, subtask_1_23.txt, subtask_1_24.txt, subtask_1_25.txt, subtask_1_26.txt, subtask_1_27.txt, subtask_1_28.txt, subtask_1_29.txt, subtask_1_30.txt, subtask_1_31.txt, subtask_1_32.txt, subtask_1_33.txt, subtask_1_34.txt, subtask_1_35.txt, subtask_1_36.txt, subtask_1_37.txt, subtask_1_38.txt, subtask_1_39.txt, subtask_1_40.txt, subtask_1_41.txt
Case Name Status Exec Time Memory
sample_01.txt AC 75 ms 21076 KB
sample_02.txt AC 72 ms 18132 KB
sample_03.txt AC 73 ms 21332 KB
subtask_1_01.txt AC 76 ms 20564 KB
subtask_1_02.txt AC 75 ms 19028 KB
subtask_1_03.txt AC 74 ms 18132 KB
subtask_1_04.txt AC 75 ms 21460 KB
subtask_1_05.txt AC 71 ms 21716 KB
subtask_1_06.txt AC 73 ms 20820 KB
subtask_1_07.txt AC 73 ms 19028 KB
subtask_1_08.txt AC 70 ms 20308 KB
subtask_1_09.txt AC 262 ms 40736 KB
subtask_1_10.txt AC 339 ms 49380 KB
subtask_1_11.txt AC 201 ms 39572 KB
subtask_1_12.txt AC 770 ms 76036 KB
subtask_1_13.txt AC 334 ms 47640 KB
subtask_1_14.txt AC 264 ms 42448 KB
subtask_1_15.txt AC 167 ms 34596 KB
subtask_1_16.txt AC 780 ms 81232 KB
subtask_1_17.txt AC 322 ms 47232 KB
subtask_1_18.txt AC 284 ms 44224 KB
subtask_1_19.txt AC 296 ms 46292 KB
subtask_1_20.txt AC 767 ms 72072 KB
subtask_1_21.txt AC 767 ms 72608 KB
subtask_1_22.txt AC 824 ms 78904 KB
subtask_1_23.txt AC 776 ms 79276 KB
subtask_1_24.txt AC 71 ms 19284 KB
subtask_1_25.txt AC 73 ms 19280 KB
subtask_1_26.txt AC 71 ms 21204 KB
subtask_1_27.txt AC 71 ms 21204 KB
subtask_1_28.txt AC 362 ms 58348 KB
subtask_1_29.txt AC 397 ms 56752 KB
subtask_1_30.txt AC 751 ms 80276 KB
subtask_1_31.txt AC 422 ms 68336 KB
subtask_1_32.txt AC 686 ms 80056 KB
subtask_1_33.txt AC 497 ms 74580 KB
subtask_1_34.txt AC 458 ms 72796 KB
subtask_1_35.txt AC 520 ms 80784 KB
subtask_1_36.txt AC 514 ms 69800 KB
subtask_1_37.txt AC 507 ms 80840 KB
subtask_1_38.txt AC 523 ms 79504 KB
subtask_1_39.txt AC 509 ms 71696 KB
subtask_1_40.txt AC 518 ms 80076 KB
subtask_1_41.txt AC 512 ms 78576 KB