結果
問題 | No.2195 AND Set |
ユーザー |
|
提出日時 | 2024-12-11 17:45:30 |
言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 125 ms / 2,000 ms |
コード長 | 1,276 bytes |
コンパイル時間 | 1,125 ms |
コンパイル使用メモリ | 92,096 KB |
実行使用メモリ | 11,100 KB |
最終ジャッジ日時 | 2024-12-11 17:45:34 |
合計ジャッジ時間 | 3,716 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 13 |
ソースコード
#include <iostream>#include <cstdint>#include <vector>#include <unordered_set>#include <array>#include <climits>using namespace std;int main(){cin.tie(nullptr);ios::sync_with_stdio(false);uint32_t Q, i, j;cin >> Q;vector<pair<char, uint32_t>> query(Q);for (i = 0; i != Q; ++i){cin >> query[i].first;if (query[i].first != '3') cin >> query[i].second;}unordered_set<uint32_t> S;array<uint32_t, CHAR_BIT * sizeof(query[0].second)> bitwise_counter;uint32_t ans;bitwise_counter.fill(UINT32_C(0));for (i = 0; i != Q; ++i)switch (query[i].first){case '1':if (S.find(query[i].second) == S.end()){S.insert(query[i].second);for (j = 0; j != bitwise_counter.size(); ++j)if ((query[i].second >> j) & UINT32_C(1)) ++bitwise_counter[j];}break;case '2':if (S.find(query[i].second) != S.end()){S.erase(query[i].second);for (j = 0; j != bitwise_counter.size(); ++j)if ((query[i].second >> j) & UINT32_C(1)) --bitwise_counter[j];}break;case '3':if (S.empty()) cout << "-1\n";else{ans = 0;for (j = 0; j != bitwise_counter.size(); ++j)if (bitwise_counter[j] == S.size()) ans |= UINT32_C(1) << j;cout << ans << '\n';}}return 0;}