結果
問題 |
No.1544 [Cherry 2nd Tune C] Synchroscope
|
ユーザー |
![]() |
提出日時 | 2025-03-20 20:30:12 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 347 ms / 2,000 ms |
コード長 | 1,461 bytes |
コンパイル時間 | 167 ms |
コンパイル使用メモリ | 82,472 KB |
実行使用メモリ | 80,920 KB |
最終ジャッジ日時 | 2025-03-20 20:30:48 |
合計ジャッジ時間 | 5,616 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 48 |
ソースコード
import sys import math from collections import defaultdict def main(): N, M = map(int, sys.stdin.readline().split()) A = list(map(int, sys.stdin.readline().split())) B = list(map(int, sys.stdin.readline().split())) value_map = defaultdict(lambda: {'A': [], 'B': []}) for idx, num in enumerate(A, 1): value_map[num]['A'].append(idx) for idx, num in enumerate(B, 1): value_map[num]['B'].append(idx) min_i = float('inf') for num in value_map: alist = value_map[num]['A'] blist = value_map[num]['B'] if not alist or not blist: continue for a in alist: for b in blist: a1 = a - 1 a2 = b - 1 n = N m = M d = math.gcd(n, m) if (a1 - a2) % d != 0: continue lcm = (n * m) // d m_new = m // d n_new = n // d t = (a2 - a1) // d try: inv_n = pow(n_new, -1, m_new) except: continue k0 = (t * inv_n) % m_new x0 = a1 + k0 * n x_min = x0 % lcm i_candidate = x_min + 1 if i_candidate < min_i: min_i = i_candidate print(min_i if min_i != float('inf') else -1) if __name__ == '__main__': main()