結果
問題 | No.2359 A in S ? |
ユーザー |
![]() |
提出日時 | 2023-06-24 07:50:28 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 680 ms / 2,000 ms |
コード長 | 1,356 bytes |
コンパイル時間 | 173 ms |
コンパイル使用メモリ | 82,580 KB |
実行使用メモリ | 261,244 KB |
最終ジャッジ日時 | 2024-07-01 11:12:11 |
合計ジャッジ時間 | 14,370 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 18 |
ソースコード
from collections import defaultdictimport math# xで割ったあまりがyになる自然数の中で、n以上で最小のものを返す関数def f(n, x, y):mo = n % xif mo <= y:return n + y - moelse:return n + x + y - mo# xで割ったあまりがyになる自然数の中で、n以下で最大のものを返す関数def g(n, x, y):mo = n % xif y <= mo:return n + y - moelse:return n - x + y - moN, M = map(int, input().split())sq = math.isqrt(10 ** 5)higher = []lower = [[] for _ in range(sq)]for _ in range(N):l, r, x, y = map(int, input().split())if x < sq:lower[x].append((y, l, r))else:higher.append((l, r, x, y))line = [0] * (10 ** 5 + 1)for l, r, x, y in higher:start = f(l, x, y)end = g(r, x, y)for i in range(start, end + 1, x):line[i] += 1for x, gr in enumerate(lower):x_line = [0] * (10 ** 5 + 1)for y, l, r in gr:start = f(l, x, y)end = g(r, x, y) + xx_line[start] += 1try:x_line[end] -= 1except IndexError:passfor i in range(x, 10 ** 5 + 1):x_line[i] += x_line[i - x]for i in range(10 ** 5 + 1):line[i] += x_line[i]A = list(map(int, input().split()))for a in A:print(line[a])