結果
| 問題 |
No.245 貫け!
|
| コンテスト | |
| ユーザー |
ぴろず
|
| 提出日時 | 2015-07-17 22:55:52 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 1,424 ms / 5,000 ms |
| コード長 | 5,737 bytes |
| コンパイル時間 | 2,514 ms |
| コンパイル使用メモリ | 82,372 KB |
| 実行使用メモリ | 51,832 KB |
| 最終ジャッジ日時 | 2024-07-08 09:21:22 |
| 合計ジャッジ時間 | 19,177 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 16 |
ソースコード
package no245;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.InputMismatchException;
import java.util.NoSuchElementException;
public class Main {
static IO io = new IO();
public static void main(String[] args) {
int n = io.nextInt();
Vector2[][] seg = new Vector2[n][2];
for(int i=0;i<n;i++) {
seg[i][0] = new Vector2(io.nextLong(), io.nextLong());
seg[i][1] = new Vector2(io.nextLong(), io.nextLong());
}
int ans = 0;
for(int i=0;i<=200;i++) {
for(int j=-200;j<=200;j++) {
if (i == 0 && j == 0 || gcd(Math.abs(i),Math.abs(j)) != 1) {
continue;
}
Vector2 d = new Vector2(i, j);
ArrayList<Event> al = new ArrayList<>();
for(int k=0;k<n;k++) {
long x1 = seg[k][0].dot(d);
long x2 = seg[k][1].dot(d);
al.add(new Event(Math.min(x1, x2), 1));
al.add(new Event(Math.max(x1, x2), -1));
}
Collections.sort(al);
int sum = 0;
for(Event e:al) {
sum += e.a;
ans = Math.max(ans, sum);
}
}
}
System.out.println(ans);
}
public static long gcd(long a,long b) {
while(b!=0) {
long r = a%b;
a = b;
b = r;
}
return a;
}
}
class Event implements Comparable<Event>{
long x,a;
public Event(long x,long a) {
this.x = x;
this.a = a;
}
public int compareTo(Event o) {
if (x != o.x) {
return Long.compare(x, o.x);
}
return - Long.compare(a, o.a);
}
public String toString() {
return "[" + x + "," + a + "]";
}
}
class Vector2 {
long x = 0;
long y = 0;
public Vector2(long x,long y) {
this.x = x;
this.y = y;
}
public long dot(Vector2 v) {
return this.x*v.x+this.y*v.y;
}
public long cross(Vector2 v) {
return this.x*v.y-this.y*v.x;
}
public Vector2 add(Vector2 v) {
return new Vector2(this.x+v.x,this.y+v.y);
}
public Vector2 subtract(Vector2 v) {
return new Vector2(this.x-v.x,this.y-v.y);
}
public Vector2 multiply(long k) {
return new Vector2(k*this.x,k*this.y);
}
public String toString() {
return this.x + " " + this.y;
}
public boolean equals(Object o) {
if (o instanceof Vector2) {
Vector2 v = (Vector2) o;
return x == v.x && y == v.y;
}
return super.equals(o);
}
}
class IO extends PrintWriter {
private final InputStream in;
private final byte[] buffer = new byte[1024];
private int ptr = 0;
private int buflen = 0;
public IO() { this(System.in);}
public IO(InputStream source) { super(System.out); this.in = source;}
private boolean hasNextByte() {
if (ptr < buflen) {
return true;
}else{
ptr = 0;
try {
buflen = in.read(buffer);
} catch (IOException e) {
e.printStackTrace();
}
if (buflen <= 0) {
return false;
}
}
return true;
}
private int readByte() { if (hasNextByte()) return buffer[ptr++]; else return -1;}
private static boolean isPrintableChar(int c) { return 33 <= c && c <= 126;}
private static boolean isNewLine(int c) { return c == '\n' || c == '\r';}
public boolean hasNext() { while(hasNextByte() && !isPrintableChar(buffer[ptr])) ptr++; return hasNextByte();}
public boolean hasNextLine() { while(hasNextByte() && isNewLine(buffer[ptr])) ptr++; return hasNextByte();}
public String next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
StringBuilder sb = new StringBuilder();
int b = readByte();
while(isPrintableChar(b)) {
sb.appendCodePoint(b);
b = readByte();
}
return sb.toString();
}
public char[] nextCharArray(int len) {
if (!hasNext()) {
throw new NoSuchElementException();
}
char[] s = new char[len];
int i = 0;
int b = readByte();
while(isPrintableChar(b)) {
if (i == len) {
throw new InputMismatchException();
}
s[i++] = (char) b;
b = readByte();
}
return s;
}
public String nextLine() {
if (!hasNextLine()) {
throw new NoSuchElementException();
}
StringBuilder sb = new StringBuilder();
int b = readByte();
while(!isNewLine(b)) {
sb.appendCodePoint(b);
b = readByte();
}
return sb.toString();
}
public long nextLong() {
if (!hasNext()) {
throw new NoSuchElementException();
}
long n = 0;
boolean minus = false;
int b = readByte();
if (b == '-') {
minus = true;
b = readByte();
}
if (b < '0' || '9' < b) {
throw new NumberFormatException();
}
while(true){
if ('0' <= b && b <= '9') {
n *= 10;
n += b - '0';
}else if(b == -1 || !isPrintableChar(b)){
return minus ? -n : n;
}else{
throw new NumberFormatException();
}
b = readByte();
}
}
public int nextInt() {
long nl = nextLong();
if (nl < Integer.MIN_VALUE || nl > Integer.MAX_VALUE) {
throw new NumberFormatException();
}
return (int) nl;
}
public char nextChar() {
if (!hasNext()) {
throw new NoSuchElementException();
}
return (char) readByte();
}
public double nextDouble() { return Double.parseDouble(next());}
public int[] nextIntArray(int n) { int[] a = new int[n]; for(int i=0;i<n;i++) a[i] = nextInt(); return a;}
public long[] nextLongArray(int n) { long[] a = new long[n]; for(int i=0;i<n;i++) a[i] = nextLong(); return a;}
public double[] nextDoubleArray(int n) { double[] a = new double[n]; for(int i=0;i<n;i++) a[i] = nextDouble(); return a;}
public void nextIntArrays(int[]... a) { for(int i=0;i<a[0].length;i++) for(int j=0;j<a.length;j++) a[j][i] = nextInt();}
public int[][] nextIntMatrix(int n,int m) { int[][] a = new int[n][]; for(int i=0;i<n;i++) a[i] = nextIntArray(m); return a;}
public char[][] nextCharMap(int n,int m) { char[][] a = new char[n][]; for(int i=0;i<n;i++) a[i] = nextCharArray(m); return a;}
public void close() { super.close(); try {in.close();} catch (IOException e) {}}
}
ぴろず