結果

問題 No.3436 [Cherry 8th Tune B] この夏に何が起こるかな?
コンテスト
ユーザー ks2m
提出日時 2026-01-23 23:12:18
言語 Java
(openjdk 25.0.1)
結果
WA  
実行時間 -
コード長 2,638 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 2,841 ms
コンパイル使用メモリ 88,724 KB
実行使用メモリ 81,732 KB
最終ジャッジ日時 2026-01-23 23:13:24
合計ジャッジ時間 51,446 ms
ジャッジサーバーID
(参考情報)
judge6 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 23 WA * 20
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int q = Integer.parseInt(br.readLine());
		PrintWriter pw = new PrintWriter(System.out);
		for (int z = 0; z < q; z++) {
			String[] sa = br.readLine().split(" ");
			int n = Integer.parseInt(sa[0]);
			int m = Integer.parseInt(sa[1]);
			int k = Integer.parseInt(sa[2]);
			long p = Long.parseLong(sa[3]);
			int[] t = na(br, n);
			int[] c = na(br, n);
			int[] b = na(br, m);
			int[] d = na(br, m);
			int[] s = na(br, k);

			List<List<Obj>> list = new ArrayList<>(k + 1);
			for (int i = 0; i <= k; i++) {
				list.add(new ArrayList<>());
			}
			List<Obj> all = new ArrayList<>(m);
			for (int i = 0; i < m; i++) {
				Obj o = new Obj();
				o.i = i;
				o.b = b[i];
				o.d = d[i];
				list.get(o.d).add(o);
				all.add(o);
			}
			for (int i = 1; i <= k; i++) {
				Collections.sort(list.get(i), (o1, o2) -> o1.b - o2.b);
			}
			Collections.sort(all, (o1, o2) -> o1.b - o2.b);

			long ok = 2000000000;
			long ng = 0;
			while (Math.abs(ok - ng) > 1) {
				long mid = (ok + ng) / 2;
				long val = 0;
				for (int i = 0; i < n; i++) {
					int v0 = binarySearch(all, mid - t[i]);
					int v1 = binarySearch(list.get(c[i]), mid - t[i]);
					int v2 = binarySearch(list.get(c[i]), mid - t[i] + s[c[i] - 1]);
					val += v0 - v1 + v2;
				}
				if (val >= p) {
					ok = mid;
				} else {
					ng = mid;
				}
			}
			for (int i = 0; i < n; i++) {
				int idx = binarySearch(all, ng - t[i]);
				if (idx < m) {
					Obj o = all.get(idx);
					if (t[i] + o.b == ng) {
						pw.println((i + 1) + " " + (o.i + 1));
						break;
					}
				}
				idx = binarySearch(list.get(c[i]), ng - t[i] + s[c[i] - 1]);
				if (idx < m) {
					Obj o = all.get(idx);
					if (t[i] + o.b == ng) {
						pw.println((i + 1) + " " + (o.i + 1));
						break;
					}
				}
			}
		}
		pw.flush();
		br.close();
	}

	static int binarySearch(List<Obj> list, long val) {
		int ok = list.size();
		int ng = -1;
		while (Math.abs(ok - ng) > 1) {
			int mid = (ok + ng) / 2;
			if (list.get(mid).b >= val) {
				ok = mid;
			} else {
				ng = mid;
			}
		}
		return ok;
	}

	static class Obj {
		int i, b, d;
	}

	static int[] na(BufferedReader br, int n) throws Exception {
		String[] sa = br.readLine().split(" ");
		int[] a = new int[n];
		for (int i = 0; i < n; i++) {
			a[i] = Integer.parseInt(sa[i]);
		}
		return a;
	}
}
0