結果
| 問題 | No.3219 Ruler to Maximize |
| コンテスト | |
| ユーザー |
ジュ・ビオレ・グレイス
|
| 提出日時 | 2025-08-01 22:26:48 |
| 言語 | D (dmd 2.109.1) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,104 bytes |
| 記録 | |
| コンパイル時間 | 1,683 ms |
| コンパイル使用メモリ | 93,716 KB |
| 実行使用メモリ | 7,720 KB |
| 最終ジャッジ日時 | 2025-08-01 22:26:54 |
| 合計ジャッジ時間 | 5,018 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 15 WA * 17 |
ソースコード
import std.stdio, std.algorithm, std.array, std.conv, std.typecons;
void main() {
readln;
auto A = readln.split.to!(ulong[]);
auto N = A.length;
Set[2^^12] realize;
ulong[Set] or_vals;
or_vals[Set(0, 0)] = 0;
foreach (i, a; A) foreach (set, val; or_vals) {
auto set2 = add(set, i);
auto val2 = val | a;
// new value
if (realize[val2] == Set(0, 0)) realize[val2] = set2, or_vals[set2] = val2;
}
ulong[Set] wb_vals;
foreach (set, val; or_vals) {
ulong b;
foreach (i, a; A)
if (!i.is_in(set)) b |= a;
if ((val & b) == 0) wb_vals[set] = val * b;
}
Set ans;
foreach (set, val; wb_vals) {
if (val > wb_vals[ans]) ans = set;
}
writeln(wb_vals[ans]);
foreach (i; 0 .. N) {
write(i.is_in(ans) ? "W" : "B");
}
writeln;
}
alias Set = Tuple!(ulong, ulong);
bool is_in(ulong i, Set a) {
if (i <= 63) return (a[0] & 2^^i) != 0;
else return (a[1] & 2^^(i-64)) != 0;
}
Set add(Set a, ulong i) {
if (i <= 63) a[0] |= 2^^i;
else a[1] |= 2^^(i-64);
return a;
}
Set remove(Set a, ulong i) {
if (i <= 63) a[0] &= ~(2^^i);
else a[1] |= ~(2^^(i-64));
return a;
}
ジュ・ビオレ・グレイス