結果
| 問題 | No.1137 Circles |
| ユーザー |
RISE70226821
|
| 提出日時 | 2020-07-31 15:41:53 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 705 ms / 2,000 ms |
| コード長 | 1,150 bytes |
| 記録 | |
| コンパイル時間 | 1,811 ms |
| コンパイル使用メモリ | 77,036 KB |
| 実行使用メモリ | 68,096 KB |
| 最終ジャッジ日時 | 2024-07-06 11:04:33 |
| 合計ジャッジ時間 | 13,338 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 22 |
ソースコード
import java.util.*;
import java.lang.*;
import java.io.*;
public class Main {
public static void main (String[] args) throws java.lang.Exception
{
// your code goes here
// 入力
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[] X = new int[N];
int[] R = new int[N];
for(int i = 0; i < N; i++){
X[i] = sc.nextInt();
R[i] = sc.nextInt();
}
// 円の左端、右端配列を作成
int[] left = new int[N];
int[] right = new int[N];
for(int i = 0; i < N; i++){
left[i] = X[i] - R[i];
right[i] = X[i] + R[i];
}
Arrays.sort(left);
Arrays.sort(right);
// 重なり合う円のカウント
int circle = 0;
int max = 0;
int indexL = 0;
int indexR = 0;
while(indexL < N && indexR < N){
if(indexL == N){
circle--;
indexR++;
}
else if(indexR == N){
circle++;
indexL++;
}
else if(left[indexL] < right[indexR]){
circle++;
indexL++;
}
else{
circle--;
indexR++;
}
if(max < circle){
max = circle;
}
}
// 出力
System.out.println(max);
}
}
RISE70226821