結果
| 問題 |
No.3053 $((0 \And 1)\mathop{|}2)\oplus 3$
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-02-05 20:15:21 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 43 ms / 2,000 ms |
| コード長 | 897 bytes |
| コンパイル時間 | 9,943 ms |
| コンパイル使用メモリ | 354,400 KB |
| 実行使用メモリ | 10,932 KB |
| 最終ジャッジ日時 | 2025-03-08 00:10:54 |
| 合計ジャッジ時間 | 11,623 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 35 |
ソースコード
#include <bits/stdc++.h>
#include "atcoder/modint.hpp"
using mint = atcoder::modint998244353;
#include "testlib.h"
void solve() {
std::string S = inf.readToken(format("[01]{%d, %d}", 1, 1'000'000));
inf.readEoln();
ensure(S[0] == '1');
std::reverse(S.begin(), S.end());
int n = S.size();
mint three = 3;
mint c0 = mint(2) / 3;
mint all_ = c0;
auto t = c0;
mint two = 1;
mint ans = 0;
for (int i = 0; i < n; i++) {
if (S[i] == '1') {
ans += two;
all_ *= three;
t *= c0;
} else {
ans += two * t;
}
three *= three;
two *= 2;
c0 *= c0;
}
std::cout << (ans * all_).val() << std::endl;
}
int main(int argc, char *argv[]) {
std::cin.tie(0)->sync_with_stdio(0);
registerValidation(argc, argv);
solve();
inf.readEof();
}