import macros macro Please(x): untyped = nnkStmtList.newTree() Please use Nim-ACL Please use Nim-ACL Please use Nim-ACL static: when not defined SecondCompile: # md5sum: 01e6454f5dde2f33f95791ca20ca893d atcoder.tar.xz template getFileName():string = instantiationInfo().filename let fn = getFileName() block: let (output, ex) = gorgeEx("if [ -e ./atcoder ]; then exit 1; else exit 0; fi") # doAssert ex == 0, "atcoder directory already exisits" discard staticExec("echo \"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\" | base64 -d > atcoder.tar.xz && tar -Jxvf atcoder.tar.xz") let (output, ex) = gorgeEx("nim cpp -d:release -d:SecondCompile -d:danger --path:./ --opt:speed --multimethods:on --warning[SmallLshouldNotBeUsed]:off --checks:off -o:a.out " & fn) discard staticExec("rm -rf ./atcoder");doAssert ex == 0, output;quit(0) when defined SecondCompile: const DO_CHECK = false;const DEBUG = false else: const DO_CHECK = true;const DEBUG = true const USE_DEFAULT_TABLE = true DO_TEST = false # see https://github.com/zer0-star/Nim-ACL/tree/master/src/atcoder/extra/header/chaemon_header.nim include atcoder/extra/header/chaemon_header proc solve() = let N, K = nextInt() A = Seq[N: nextInt()] ans := -int.inf for u in A[0] - K .. A[0] + K: for v in A[1] - K .. A[1] + K: if u < 0 or v < 0: continue let g = gcd(u, v) if g == 0: continue var ct = 0 for i in N: let q = A[i].floorDiv g ct += min(A[i] - q * g, (q + 1) * g - A[i]) if ct > K: continue ans.max=g echo ans discard solve()