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 |
|
|
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 |