結果
| 問題 | No.1955 Not Prime |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-10-28 09:02:09 |
| 言語 | Fix (1.6.0 + cp-library + minilib) |
| 結果 |
AC
不安定
|
| 実行時間 | 59 ms / 2,000 ms |
| + 78µs | |
| コード長 | 1,825 bytes |
| 記録 | |
| コンパイル時間 | 11,629 ms |
| コンパイル使用メモリ | 684,648 KB |
| 実行使用メモリ | 32,672 KB |
| 最終ジャッジ日時 | 2026-10-28 09:02:27 |
| 合計ジャッジ時間 | 14,958 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge5_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 26 |
コンパイルメッセージ
make: 'lib.o' は更新済みです.
ソースコード
module Main;
import BoolArray;
import CPLib.Arithmetic;
import CPLib.DSegtree;
import CPLib.Graph;
import CPLib.IO;
import CPLib.UnionFind;
import CPLib.TwoSat;
// ps : Array U32 = calc_prime_list(1e6);
pt : BoolArray = calc_prime_table(1e6);
hate : I64 -> I64 -> Bool = |a, b| (
let x = (a.to_string + b.to_string).from_string.as_ok : I64;
pt.@(x)
);
main : IO () = (
let n = *read_i;
let (as, bs) = *range(0, n).fold_m(([], []), |_, (as, bs)|
let a = *read_i;
let b = *read_i;
(as.push_back(a), bs.push_back(b)).pure
);
let ts = TwoSat::create(n);
// Ai hates Bi => not pi
// Ai hates Bj => not pi or not pj
let ts = range(0, n).fold(ts, |i, ts|
range(0, n).fold(ts, |j, ts|
if !hate(as.@(i), bs.@(j)) { ts };
if i == j { ts.add_clause(i, false, i, false) };
ts.add_clause(i, false, j, false)
)
);
// Bi hates Ai => pi
// Bj hates Ai => pi or pj
let ts = range(0, n).fold(ts, |i, ts|
range(0, n).fold(ts, |j, ts|
if !hate(bs.@(j), as.@(i)) { ts };
if i == j { ts.add_clause(i, true, i, true) };
ts.add_clause(i, true, j, true)
)
);
// Ai hate Aj => not pi or pj
let ts = range(0, n).fold(ts, |i, ts|
range(0, n).fold(ts, |j, ts|
if i == j || !hate(as.@(i), as.@(j)) { ts };
ts.add_clause(i, false, j, true)
)
);
// Bi hate Bj => pi or not pj
let ts = range(0, n).fold(ts, |i, ts|
range(0, n).fold(ts, |j, ts|
if i == j || !hate(bs.@(i), bs.@(j)) { ts };
ts.add_clause(i, true, j, false)
)
);
let ok = ts.solve;
if ok.is_some {
println("Yes")
} else {
println("No")
};;
pure()
);