起床困難綜合症
起床困難綜合症
題意
給你N個門,每個門的操作為AND,XOR,OR中的一種,每個門有一個運算元,現在讓一個[0,m]的數字x依次通過這n扇門,問最大的結果是多少
思路
位運算沒有進位,所以可以每一位單獨運算
所以我們讓在[0,m]範圍的每一位去通過這n道門,檢視結果即可
因為x有[0,m]範圍的限制,所以我們要儘可能的讓x最小
即對於x的第i位當且僅當
x的第i位為0時通過n道門得到的結果不為1
且x的第i位為1時通過n道門得到的結果為1時
x的第i位才為1,否則都是0
最後獲得x跑一邊n道門就是答案啦
程式碼
#include<cstdio>
#include<utility>
#include<iostream>
#include<string>
using namespace std;
long long n, m;
pair<string, long long>gates[100005];
long long pow(long long a, long long b) {
long long ans = 1;
long long base = a;
while (b > 0) {
if (b & 1) {
ans *= base;
}
base *= base;
b >>= 1;
}
return ans;
}
bool fun(long long k) {
bool ans = 0;
for (long long i = 0; i < n; i++) {
long long nu = gates[i].second >> k & 1;
if (gates[i].first == "AND") {
ans &= nu;
}
else if (gates[i].first == "OR") {
ans |= nu;
}
else {
ans ^= nu;
}
}
if (ans) {
return false;
}
else {
ans = 1;
for (long long i = 0; i < n; i++) {
long long nu = gates[i].second >> k & 1;
if (gates[i].first == "AND") {
ans &= nu;
}
else if (gates[i].first == "OR") {
ans |= nu;
}
else {
ans ^= nu;
}
}
if (ans) {
return true;
}
else {
return false;
}
}
}
string s;
long long t1;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
long long temp = 1;
for (long long i = 0; i < n; i++) {
cin >> s >> t1;
gates[i] = make_pair(s, t1);
}
long long ans = 0;
long long x = 0;
//獲取位的上限
for (long long i = 0; i < 999; i++) {
if ((1 << i) == m) {
x = i;
break;
}
else if ((1 << i) > m) {
x = i-1;
break;
}
}
long long base = pow(2, x);
//優先使高位開始貪心
for (long long i = x; i >= 0; i--) {
if (fun(i)) {
ans += base;
}
if (ans > m) {
ans -= base;
break;
}
base /= 2;
}
//得到的ans跑一邊n道門
for (long long i = 0; i < n; i++) {
long long nu = gates[i].second;
if (gates[i].first == "AND") {
ans &= nu;
}
else if (gates[i].first == "OR") {
ans |= nu;
}
else {
ans ^= nu;
}
}
printf("%lld\n", ans);
return 0;
}
相關文章
- git踩坑綜合症Git
- 美國西北大學:研究發現冬天氣溫越冷起床越困難
- 什麼是“冒名頂替綜合症”?
- 強爸帶娃記之幼兒園選擇困難症
- 今日資料行業日報(2020.11.11)『研究發現冬天氣溫越冷起床越困難』行業
- 出門困難
- 資料分析軟體選型看這5點,拯救選擇困難症患者!
- AI人工智慧幫你解決出門穿衣服的選擇困難症AI人工智慧
- SpringCloud疑難雜症SpringGCCloud
- android 疑難雜症Android
- docker的疑難雜症Docker
- 疑難雜症記錄
- 一些困難題
- Some 困難的數論
- 演算法專利的“卡脖子PTSD”綜合症,到底能不能好了?演算法
- ctfshow_web_1(困難題)Web
- leetcode:1000. 合併石頭的最低成本(區間dp,困難)LeetCode
- 選擇困難症必看!雲伺服器如何選擇作業系統,Windows和Linux哪個更好?伺服器作業系統WindowsLinux
- AI studio開發困難雜記AI
- 選擇困難的三點思考
- 遊戲研發疑難雜症(3)遊戲
- 女生轉行學IT有什麼困難?
- 如何解決MES交付困難問題?
- 大資料分析存在哪些困難大資料
- 綜合約束
- 綜合實驗
- 2024.07.27科大訊飛(有困難題)
- NP難問題求解綜述
- 教資 - 綜合(6)
- 教資 - 綜合(4)
- 教資 - 綜合(1)
- 綜合掃描工具
- 模糊綜合評價
- 2020綜合知識
- OSPF綜合實驗
- BGP綜合實驗
- OSPF 綜合實驗
- Linq 綜合寫法