結果
| 問題 | No.3662 yuu Hates Sigma Problem |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-08-30 14:39:58 |
| 言語 | D (dmd 2.113.0) |
| 結果 |
AC
|
| 実行時間 | 46 ms / 2,000 ms |
| + 341µs | |
| コード長 | 937 bytes |
| 記録 | |
| コンパイル時間 | 959 ms |
| コンパイル使用メモリ | 172,088 KB |
| 実行使用メモリ | 12,036 KB |
| 最終ジャッジ日時 | 2026-08-30 14:40:06 |
| 合計ジャッジ時間 | 3,662 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge3_1 |
(要ログイン)
| サブタスク | 配点 | 結果 |
|---|---|---|
| subtask1. | 20 % | AC * 19 |
| subtask2. | 30 % | AC * 13 |
| subtask3. | 50 % | AC * 49 |
| 合計 | 2.5 * 100% = 250 点 |
ソースコード
import std;
void main () {
const long MOD = 998244353;
int N = readln.chomp.to!int;
auto A = readln.split.to!(int[]);
// bitごとに考える
const int B = 25;
long ans = 0;
foreach (b; 0 .. B) {
int zero = N / (2 * (1 << b)) * (1 << b) + min(N % (2 * (1 << b)), 1 << b);
int one = N - zero;
// writeln(N / (2 * (1 << b)));
// writefln("b: %s zero: %s one: %s", b, zero, one);
long add = 0;
foreach (i; 0 .. N) {
int p = ((i >> b) & 1);
int x = (p == 0 ? one : zero);
add += 1L * (1 << b) * x % MOD * A[i] % MOD;
add %= MOD;
}
ans += add;
ans %= MOD;
}
writeln(ans);
}
void read (T...) (string S, ref T args) {
import std.conv : to;
import std.array : split;
auto buf = S.split;
foreach (i, ref arg; args) {
arg = buf[i].to!(typeof(arg));
}
}