結果
| 問題 | 
                            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