提出 #75560141


ソースコード 拡げる

#include <bits/stdc++.h>
using namespace std;
#define int ll

#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;

mt19937_64 rng(std::chrono::system_clock::now().time_since_epoch().count());

const int mod = 998244353;

int fix(int x){
    x%=mod;
    if(x<0)x+=mod;
    return x;
}

signed main() {
    cin.tie(0)->sync_with_stdio(0);
    int n;
    cin >> n;
    string s;
    cin >> s;
    vi a(1<<n);
    vi pw(n+1);
    pw[0] = 1;
    pw[1] = 10;
    for(int i = 2; i<=n; i++){
        pw[i] = pw[i-1] * pw[i-1] % mod;
    }
    for(int i = 0; i<(1<<n); i++){
        a[i] = s[i] - '0';
    }
    vi arr(1<<n);
    vi cnt(1<<n);
    auto self = [&](auto &&self, int l, int r) -> void {
        if(r - l == 1){
            arr[l] = a[l];
            cnt[l] = 1;
            return;
        }
        int m = (l+r)/2;
        self(self,l,m);
        self(self,m,r);
        for(int i = m; i<r; i++){
            arr[i] = arr[i - (r-m)] * pw[cnt[i]] + arr[i]; arr[i] = fix(arr[i]);
            cnt[i]++;
        }
    };
    self(self,0,1<<n);
    int ans = 0;
    for(int i = 0; i<(1<<n); i++){
        ans += (arr[i] ^ i);
    }
    cout << ans << '\n';
    return 0;
}

提出情報

提出日時
問題 M - 数字
ユーザ kevinyang
言語 C++23 (GCC 15.2.0)
得点 5
コード長 1370 Byte
結果 AC
実行時間 131 ms
メモリ 106028 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 5 / 5
結果
AC × 2
AC × 7
セット名 テストケース
Sample 00_sample_00.txt, 00_sample_01.txt
All 00_sample_00.txt, 00_sample_01.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt
ケース名 結果 実行時間 メモリ
00_sample_00.txt AC 1 ms 3440 KiB
00_sample_01.txt AC 1 ms 3428 KiB
01_random_00.txt AC 130 ms 105880 KiB
01_random_01.txt AC 131 ms 105980 KiB
01_random_02.txt AC 130 ms 105844 KiB
01_random_03.txt AC 129 ms 106028 KiB
01_random_04.txt AC 131 ms 106028 KiB