結果
問題 | No.2496 LCM between Permutations |
ユーザー | kakel-san |
提出日時 | 2023-10-08 21:36:42 |
言語 | C#(csc) (csc 3.9.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 4,832 bytes |
コンパイル時間 | 4,559 ms |
コンパイル使用メモリ | 116,812 KB |
実行使用メモリ | 43,324 KB |
平均クエリ数 | 953.38 |
最終ジャッジ日時 | 2024-07-26 18:13:29 |
合計ジャッジ時間 | 8,678 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 52 ms
40,816 KB |
testcase_01 | WA | - |
testcase_02 | WA | - |
testcase_03 | AC | 45 ms
40,824 KB |
testcase_04 | WA | - |
testcase_05 | AC | 46 ms
42,744 KB |
testcase_06 | AC | 46 ms
40,828 KB |
testcase_07 | AC | 47 ms
42,868 KB |
testcase_08 | AC | 48 ms
42,864 KB |
testcase_09 | WA | - |
testcase_10 | AC | 49 ms
42,600 KB |
testcase_11 | WA | - |
testcase_12 | AC | 47 ms
42,988 KB |
testcase_13 | AC | 45 ms
40,724 KB |
testcase_14 | WA | - |
testcase_15 | AC | 53 ms
42,600 KB |
testcase_16 | AC | 54 ms
40,572 KB |
testcase_17 | AC | 55 ms
40,956 KB |
testcase_18 | AC | 121 ms
40,976 KB |
testcase_19 | AC | 105 ms
40,312 KB |
testcase_20 | WA | - |
testcase_21 | WA | - |
testcase_22 | WA | - |
testcase_23 | AC | 148 ms
42,884 KB |
testcase_24 | AC | 129 ms
40,948 KB |
testcase_25 | WA | - |
testcase_26 | WA | - |
testcase_27 | AC | 147 ms
39,432 KB |
testcase_28 | WA | - |
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc) Copyright (C) Microsoft Corporation. All rights reserved.
ソースコード
using System; using static System.Console; using System.Linq; using System.Collections.Generic; class Program { static int NN => int.Parse(ReadLine()); static int[] NList => ReadLine().Split().Select(int.Parse).ToArray(); public static void Main() { Solve(); } static void Solve() { var n = NN; var llist = new int[n]; var plist = new Dictionary<int, int>[n]; for (var i = 0; i < n; ++i) { llist[i] = Ask(i, i); plist[i] = PDiv(llist[i]); } var a = new int[n]; var b = new int[n]; for (var i = 0; i < n; ++i) { var p = 0; foreach (var kv in plist[i]) { if (kv.Key > n / 2) { p = kv.Key; break; } } if (p == 0) continue; for (var j = 0; j < n; ++j) { if (!plist[j].ContainsKey(p)) { var lcm = Ask(i, j); if (lcm % p != 0) rev = true; a[i] = p; var bpos = 0; for (var k = 0; k < n; ++k) { if (i == k) { b[k] = llist[i] == p ? llist[k] : (llist[i] / p); } else { var l = Ask(i, k); if (l == p) bpos = k; b[k] = l == p ? l : (l / p); } } // b[bpos] = 1 or p for (var k = 0; k < n; ++k) { if (bpos == k) { a[k] = (llist[k] <= p) ? llist[k] : (llist[k] / p); } else { var l = Ask(k, bpos); if (l % p != 0) b[bpos] = 1; a[k] = (l <= p) ? l : (l / p); } } for (var k = 0; k < n; ++k) if (i != k && a[k] == p) { a[k] = 1; for (var m = 0; m < n; ++m) if (m != bpos && b[m] == p) { var l = Ask(k, m); if (l == 1) b[m] = 1; else b[bpos] = 1; break; } break; } break; } } break; } Ans(a, b); // WriteLine($"asks: {asks}"); // Check(a, b); } static bool rev; static int asks = 0; static int Ask(int i, int j) { // return a[i] * b[j] / GCD(a[i], b[j]); if (rev) WriteLine($"? {j + 1} {i + 1}"); else WriteLine($"? {i + 1} {j + 1}"); ++asks; return NN; } static bool Ans(int[] a, int[] b) { if (rev) WriteLine($"! {string.Join(" ", b)} {string.Join(" ", a)}"); else WriteLine($"! {string.Join(" ", a)} {string.Join(" ", b)}"); return true; } static Dictionary<int, int> PDiv(int n) { var dic = new Dictionary<int, int>(); var tmp = n; while (tmp % 2 == 0) { tmp /= 2; if (dic.ContainsKey(2)) ++dic[2]; else dic.Add(2, 1); } for (var p = 3; p * p <= n; p += 2) { while (tmp % p == 0) { tmp /= p; if (dic.ContainsKey(p)) ++dic[p]; else dic.Add(p, 1); } if (tmp == 1) break; } if (tmp > 1) dic.Add(tmp, 1); return dic; } static void DebugDic<T, U>(Dictionary<T, U> dic) { Console.WriteLine("Dic:"); foreach (var kv in dic) Console.WriteLine(" {0} = {1}", kv.Key, kv.Value); } static void Check(int[] a, int[] b) { var la = a.ToList(); la.Sort(); var lb = b.ToList(); lb.Sort(); for (var i = 0; i + 1 < la.Count; ++i) { if (la[i] == 0 || lb[i] == 0) { WriteLine("zero found"); return; } if (la[i] == la[i + 1] || lb[i] == lb[i + 1]) { WriteLine("Duplicate"); return; } } } }