提出 #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 |
| 結果 |
|
|
| セット名 |
テストケース |
| 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 |