結果
| 問題 | No.3436 [Cherry 8th Tune B] この夏に何が起こるかな? |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-01-23 23:00:04 |
| 言語 | C# (.NET 10.0.101) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,742 bytes |
| 記録 | |
| コンパイル時間 | 11,053 ms |
| コンパイル使用メモリ | 170,388 KB |
| 実行使用メモリ | 176,588 KB |
| 最終ジャッジ日時 | 2026-01-23 23:01:02 |
| 合計ジャッジ時間 | 44,983 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 25 TLE * 1 -- * 17 |
コンパイルメッセージ
復元対象のプロジェクトを決定しています... /home/judge/data/code/main.csproj を復元しました (130 ミリ秒)。 main -> /home/judge/data/code/bin/Release/net10.0/main.dll main -> /home/judge/data/code/bin/Release/net10.0/publish/
ソースコード
#nullable enable
#region
var (_input, _iter) = (Array.Empty<string>(), 0);
T I<T>() where T : IParsable<T>
{
while (_iter >= _input.Length) (_input, _iter) = (Console.ReadLine()!.Split(' '), 0);
return T.Parse(_input[_iter++], null);
}
#endregion
static T[] Range<T>(int n, Func<T> F) => Enumerable.Range(0, n).Select(_ => F()).ToArray();
(int, int) Solve()
{
var n1 = I<int>();
var n2 = I<int>();
var k = I<int>();
var j = I<long>();
var pz1 = Range(n1, I<long>);
var cz1 = Range(n1, () => I<int>() - 1);
var pz2 = Range(n2, I<long>);
var cz2 = Range(n2, () => I<int>() - 1);
var sz = Range(k, I<long>);
var cd = Range(k, () => new List<long>());
for (var i = 0; i < n2; i++) cd[cz2[i]].Add(pz2[i]);
foreach (var l in cd) l.Sort();
var ad = new List<long>(pz2);
ad.Sort();
int CountLT(List<long> l, long x)
{
var pass = -1;
var fail = l.Count;
while (fail - pass >= 2)
{
var mid = (pass + fail) >> 1;
if (l[mid] <= x) pass = mid;
else fail = mid;
}
return pass + 1;
}
var pass = -1L;
var fail = long.MaxValue >> 1;
while (fail - pass >= 2)
{
var mid = (pass + fail) >> 1;
var s = 0L;
for (var i = 0; i < n1; i++)
{
var (p1, c1) = (pz1[i], cz1[i]);
s += CountLT(ad, mid - p1);
s -= CountLT(cd[c1], mid - p1);
s += CountLT(cd[c1], mid - p1 + sz[c1]);
}
if (s < j) pass = mid;
else fail = mid;
}
pass++;
var pd = new Dictionary<long, List<(int, int)>>();
for (var i = 0; i < n2; i++)
{
var (p2, c2) = (pz2[i], cz2[i]);
if (!pd.ContainsKey(p2)) pd[p2] = new();
var l = pd[p2];
if (l.Count == 0) l.Add((c2, i));
else if (l.Count < 2 && l[0].Item1 != c2) l.Add((c2, i));
}
while (true)
{
for (var i = 0; i < n1; i++)
{
var (p1, c1) = (pz1[i], cz1[i]);
var p2 = pass - p1;
if (pd.ContainsKey(p2))
{
var l2 = pd[p2];
foreach (var (c2, i2) in l2)
{
if (c2 != c1) return (i, i2);
}
}
p2 = pass - p1 + sz[c1];
if (pd.ContainsKey(p2))
{
var l2 = pd[p2];
foreach (var (c2, i2) in l2)
{
if (c2 == c1) return (i, i2);
}
}
}
pass++;
}
}
var t = I<int>();
var ans = Range(t, Solve).Select(e => (e.Item1 + 1) + " " + (e.Item2 + 1));
Console.WriteLine(string.Join(Environment.NewLine, ans));