結果
問題 |
No.2178 Payable Magic Items
|
ユーザー |
![]() |
提出日時 | 2024-11-07 09:55:27 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 118 ms / 4,000 ms |
コード長 | 900 bytes |
コンパイル時間 | 3,241 ms |
コンパイル使用メモリ | 250,752 KB |
実行使用メモリ | 6,400 KB |
最終ジャッジ日時 | 2024-11-07 09:55:32 |
合計ジャッジ時間 | 5,485 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 23 |
ソースコード
#include <bits/stdc++.h> std::vector<int> pow5; int get(int S, int i) { return (S / pow5[i]) % 5; } int add(int S, int i) { return S + pow5[i]; } int main() { int n, k; std::cin >> n >> k; pow5.resize(k + 1, 1); for (int i = 1; i <= k; i++) pow5[i] = pow5[i - 1] * 5; std::vector<int> v(pow5.back(), 0); for (int _ : std::ranges::iota_view(0, n)) { int x = 0; for (int _ : std::ranges::iota_view(0, k)) { char c; std::cin >> c; x = x * 5 + 4 - (c - '0'); } v[x] = 1; } auto w = v; for (int i = 0; i < k; i++) for (int S = 0; S < w.size(); S++) { if (get(S, i) == 4) continue; w[add(S, i)] += w[S]; } int res = 0; for (int S = 0; S < v.size(); S++) res += v[S] and (w[S] > v[S]); std::cout << res << '\n'; }