結果

問題 No.1017 Reiwa Sequence
コンテスト
ユーザー 👑 tttmmmyyyy
提出日時 2026-11-03 22:13:41
言語 Fix
(1.6.0 + cp-library + minilib)
コンパイル:
fix_c _filename_
実行:
./a.out
結果
WA  
実行時間 -
コード長 2,823 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 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' は更新済みです.

ソースコード

diff #
raw source code

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()
);
0