結果
| 問題 | No.1017 Reiwa Sequence |
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2026-11-03 22:13:41 |
| 言語 | Fix (1.6.0 + cp-library + minilib) |
| 結果 |
WA
不安定
|
| 実行時間 | - |
| コード長 | 2,823 bytes |
| 記録 | |
| コンパイル時間 | 13,019 ms |
| コンパイル使用メモリ | 676,888 KB |
| 実行使用メモリ | 9,928 KB |
| 最終ジャッジ日時 | 2026-11-03 22:14:27 |
| 合計ジャッジ時間 | 38,744 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge4_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 37 WA * 14 |
コンパイルメッセージ
make: 'lib.o' は更新済みです.
ソースコード
module Main;
import BinaryHeap;
import BoolArray;
import CPLib.Arithmetic;
import CPLib.Bipartite;
import CPLib.Bits;
import CPLib.Convolution;
import CPLib.DSegtree;
import CPLib.Graph;
import CPLib.IO;
import CPLib.LDSegtree;
import CPLib.LSegtree;
import CPLib.MaxFlow;
// import CPLib.Memoize;
import CPLib.MinCostFlow;
import CPLib.Misc;
import CPLib.Monoid;
import CPLib.Segtree;
import CPLib.String;
import CPLib.Trait;
import CPLib.TwoSat;
import CPLib.UnionFind;
import CPLib.ZP;
import HashMap;
import HashSet;
cM : I64 = 150000;
cI : I64 = (
count_up(0).filter(|n|
(1.shift_left(n)-1)*(1.shift_left(n)-2)/2 > cM*cM
).get_first.as_some
);
decode : I64 -> I64 -> Array I64 = |flag, len| (
range(0, len).fold(([], flag), |_, (arr, flag)|
let x = flag % 3;
let r = if x == 0 { x } else if x == 1 { -1 } else { 1 };
let arr = arr.push_back(r);
let flag = flag / 3;
(arr, flag)
).@0
);
sums : Array I64 -> HashMap I64 I64 = |as| (
let len = as.@size;
let pow3 = range(0, len).fold(1, |_, pow| pow * 3);
let table = HashMap::empty(pow3);
let table = range(0, pow3).fold(table, |flag, table|
let bs = decode(flag, len);
let sum = range(0, len).map(|i| as.@(i) * bs.@(i)).sum;
table.HashMap::insert(sum, flag)
);
table
);
show_hashmap : HashMap I64 I64 -> String = |mp| (
mp.to_iter.to_array.to_string
);
main : IO () = (
let iN = *read_i;
let iAs = *read_is(iN);
let cL = min(cI, iN);
let as0 = iAs.get_sub(0, cL/2);
let as1 = iAs.get_sub(cL/2, cL);
let sums0 = sums(as0);
let sums1 = sums(as1);
// eval "sums0 = {}".debug_eprintfln((sums0.show_hashmap,));
// eval "sums1 = {}".debug_eprintfln((sums1.show_hashmap,));
let opt_pair = sums0.to_iter.filter_map(|(sum0, flag0)|
match sums1.HashMap::find(sum0) {
none() => none(),
some(flag1) => (
if flag0 == 0 && flag1 == 0 { none() };
(flag0, flag1).some
)
}
).get_first;
match opt_pair {
none() => (
println("No")
),
some((flag0, flag1)) => (
let bs0 = decode(flag0, as0.@size);
let bs1 = decode(flag1, as1.@size);
let ans = [];
let ans = range(0, as0.@size).fold(ans, |i, ans|
let b = as0.@(i) * bs0.@(i);
ans.push_back(b)
);
let ans = range(0, as1.@size).fold(ans, |i, ans|
let b = as1.@(i) * bs1.@(i);
ans.push_back(-b)
);
let ans = range(ans.@size, iN).fold(ans, |i, ans| ans.push_back(0));
"Yes".println;;
"{}".printfln((ans.to_iter.joined_with(" "),))
)
};;
pure()
);