Submission #1546227


Source Code Expand

import java.io.*;
import java.util.*;
public class Main {
	public static void main(String[] args)throws Throwable {
		MyScanner sc=new MyScanner();
		PrintWriter pw=new PrintWriter(System.out);
		
		int x1=sc.nextInt();
		int y1=sc.nextInt();
		int x2=sc.nextInt();
		int y2=sc.nextInt();
		boolean neg=false;
		if((Math.min(x1, x2)==x1) !=(Math.min(y1, y2)==y1))
			neg=true;
		if(neg){
			x1*=(-1);
			x2*=(-1);
		}
		
		int minX=Math.min(x1, x2);
		int maxX=Math.max(x1, x2);
		int minY=Math.min(y1, y2);
		int maxY=Math.max(y1, y2);
		
		
		
		int n=sc.nextInt();
		int [] x=new int [n];
		int [] y=new int [n];
		TreeMap<Integer, Integer> mapX=new TreeMap<Integer, Integer>();
		TreeMap<Integer, Integer> mapY=new TreeMap<Integer, Integer>();
		for(int i=0;i<n;i++){
			x[i]=sc.nextInt();
			if(neg)
				x[i]*=(-1);
			y[i]=sc.nextInt();
			mapX.put(x[i], y[i]);
			mapY.put(y[i], x[i]);
		}
		double circ=Math.PI*20;
		double init=100.0*(maxX-minX+maxY-minY);
		double op1=init,op2=init;
		if(mapX.containsKey(minX)){
			int tmp=mapX.get(minX);
			if(tmp>minY && tmp<maxY)
				op1+=(circ/2-20);
			if(tmp==maxY)
				op1+=(circ/4-20);
		}
		if(mapY.containsKey(maxY)){
			int tmp=mapY.get(maxY);
			if(tmp>minX && tmp<maxX)
				op1+=(circ/2-20);
		}
		if(mapX.containsKey(maxX)){
			int tmp=mapX.get(maxX);
			if(tmp>minY && tmp<maxY)
				op2+=(circ/2-20);
			if(tmp==minY)
				op2+=(circ/4-20);
		}
		if(mapY.containsKey(minY)){
			int tmp=mapY.get(minY);
			if(tmp>minX && tmp<maxX)
				op2+=(circ/2-20);
		}
		double dis=Math.min(op1, op2);
		ArrayList<pair> arr=new ArrayList<pair>();
		for(int i=0;i<n;i++)
			if(x[i]>=minX && x[i]<=maxX && y[i]>=minY && y[i]<=maxY){
				arr.add(new pair(x[i], y[i]));
			}
		Collections.sort(arr);
		int [] a=new int [arr.size()];
		for(int i=0;i<a.length;i++)
			a[i]=arr.get(i).y;
		int l=lis(a, a.length);
		if(minX!=maxX && minY!=maxY){	
			if(l==maxY-minY+1 || l==maxX-minX+1)
				dis=Math.min(dis, init-l*(20-circ/4)+circ/4);
			else
				dis=Math.min(dis, init-l*(20-circ/4));
		}
		pw.println(dis);
		pw.flush();
		pw.close();
	}
	
	static class pair implements Comparable<pair>{
		int x,y;
		pair(int a,int b){
			x=a;
			y=b;
		}
		public int compareTo(pair o) {
			return x-o.x;
		}
	}
	
	public static int lis(int [] a,int n){
		ArrayList<Integer> l=new ArrayList<Integer>();
		for(int i=0;i<n;i++){
			int pos=Collections.binarySearch(l, a[i]);
			if(pos<0)
				pos=-(pos+1);
			if(pos>=l.size())
				l.add(a[i]);
			else
				l.set(pos, a[i]);
		}
		return l.size();
	}
	
	static class MyScanner {
		BufferedReader br;
		StringTokenizer st;
		public MyScanner() {
			br = new BufferedReader(new InputStreamReader(System.in));
		}
		String next() {while (st == null || !st.hasMoreElements()) {
			try {st = new StringTokenizer(br.readLine());}
			catch (IOException e) {e.printStackTrace();}}
		return st.nextToken();}
		int nextInt() {return Integer.parseInt(next());}
		long nextLong() {return Long.parseLong(next());}
		double nextDouble() {return Double.parseDouble(next());}
		String nextLine(){String str = "";
		try {str = br.readLine();}
		catch (IOException e) {e.printStackTrace();}
		return str;}
	}
}

Submission Info

Submission Time
Task C - Fountain Walk
User Kharouba
Language Java8 (OpenJDK 1.8.0)
Score 900
Code Size 3299 Byte
Status AC
Exec Time 784 ms
Memory 104768 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 72 ms 21588 KB
sample_02.txt AC 73 ms 16980 KB
sample_03.txt AC 72 ms 18772 KB
subtask_1_01.txt AC 73 ms 19540 KB
subtask_1_02.txt AC 72 ms 18516 KB
subtask_1_03.txt AC 71 ms 17876 KB
subtask_1_04.txt AC 69 ms 19412 KB
subtask_1_05.txt AC 71 ms 22996 KB
subtask_1_06.txt AC 80 ms 19284 KB
subtask_1_07.txt AC 71 ms 17620 KB
subtask_1_08.txt AC 78 ms 19284 KB
subtask_1_09.txt AC 287 ms 44536 KB
subtask_1_10.txt AC 406 ms 62276 KB
subtask_1_11.txt AC 231 ms 38128 KB
subtask_1_12.txt AC 738 ms 102288 KB
subtask_1_13.txt AC 427 ms 68068 KB
subtask_1_14.txt AC 279 ms 44736 KB
subtask_1_15.txt AC 202 ms 36148 KB
subtask_1_16.txt AC 784 ms 101720 KB
subtask_1_17.txt AC 377 ms 57992 KB
subtask_1_18.txt AC 333 ms 53904 KB
subtask_1_19.txt AC 335 ms 56232 KB
subtask_1_20.txt AC 765 ms 103844 KB
subtask_1_21.txt AC 773 ms 103628 KB
subtask_1_22.txt AC 784 ms 100044 KB
subtask_1_23.txt AC 776 ms 102412 KB
subtask_1_24.txt AC 70 ms 23380 KB
subtask_1_25.txt AC 70 ms 17748 KB
subtask_1_26.txt AC 72 ms 16980 KB
subtask_1_27.txt AC 70 ms 21204 KB
subtask_1_28.txt AC 513 ms 81436 KB
subtask_1_29.txt AC 534 ms 84344 KB
subtask_1_30.txt AC 748 ms 91984 KB
subtask_1_31.txt AC 476 ms 83044 KB
subtask_1_32.txt AC 577 ms 104768 KB
subtask_1_33.txt AC 474 ms 83592 KB
subtask_1_34.txt AC 504 ms 81724 KB
subtask_1_35.txt AC 526 ms 91568 KB
subtask_1_36.txt AC 564 ms 91748 KB
subtask_1_37.txt AC 630 ms 100748 KB
subtask_1_38.txt AC 602 ms 100216 KB
subtask_1_39.txt AC 587 ms 93620 KB
subtask_1_40.txt AC 547 ms 92012 KB
subtask_1_41.txt AC 531 ms 91288 KB