[BOJ]11723話(ビットマスク)


1.質問
https://www.acmicpc.net/problem/11723
2.アイデア
ビットシールドで解決しました.
問題を解くときに生じる疑問は,配列を利用して問題を解くのにほとんど時間差がないことである.
メソッドメモリタイムビットマスク2024 KB 696 msアレイ2024 KB 704 ms
次のコードは標準I/O時間を短縮します(次のブログを参照)
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
使用は重要な問題です.
3.解法
1)利用110 GHT⭕-ビットマスク
  • コード
  • #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
    	ios::sync_with_stdio(false);
    	cin.tie(NULL); cout.tie(NULL);
    
    	int testcase;
    	cin >> testcase;
    
    	int S = 0;
    
    	while (testcase--) {
    		int num;
    		string str;
    		cin >> str;
    
    		if (str == "add") {
    			cin >> num;
    			S |= (1 << num);
    		}
    		else if (str == "remove") {
    			cin >> num;
    			S &= ~(1 << num);
    		}
    		else if (str == "check") {
    			cin >> num;
    			if (S & (1 << num)) cout << 1 << '\n';
    			else cout << 0 << '\n';
    		}
    		else if (str == "toggle")
    		{
    			cin >> num;
    			S ^= (1 << num);
    		}
    		else if (str == "all") {
    			S = -1;
    		}
    		else if (str == "empty") {
    			S = 0;
    		}
    	}
    }
    4. 🚫 に注意
    1)演算子の優先度
  • コード
  • else if (str == "check") {
    			cin >> num;
    			if (S & (1 << num) == 1) cout << 1 << '\n';
    			else cout << 0 << '\n';
    		}
  • 注意事項
    if文では、リレーショナル演算子の優先度がビット演算子より高いため、予想される操作は実現できません.
  • <コメント>
    ブログhttps://yjyoon-dev.github.io/boj/2021/06/30/boj-11723/