給定乙個只由0(假)、1(真)、&(邏輯與)、|(邏輯或)和^(異或)五種字元組成的字串express,再給定乙個布林值desires。求出express能有多少種組合方式,可以達到desired的結果。並輸出你所求出的總方案數對10^9+7取模後的值。
輸出兩行,第一行包含乙個只有0、1、&、|和^組成的字串。其長度小於500,第二行只有乙個布林值,代表desired。
輸出乙個整數,表示取模後的答案。
示例1
1^0|0|1
false
2
1^((0|0)|1)和1^(0|(0|1))可以得到false
示例2
1
false
0
時間複雜度o(n^3),空間複雜度o(n^2)。
//方法一:暴力列舉 o(n!) o(n)
//執行超時:您的程式未能在規定時間內執行結束,請檢查是否迴圈有錯或演算法複雜度過大。
//case通過率為15.00%
#includeusing namespace std;
const int number=1000000007;
bool isvalid(const string& exp)
for (int i = 0; i < exp.size(); i += 2)
} for (int i = 1; i < exp.size(); i += 2)
} return true;
}long long p(const string& exp, const string& desired, int left, int right)
else
} long long res = 0;
if (desired=="true")
else if (exp[i] == '|')
else
} }else
else if (exp[i] == '|')
else
} }return res;
}int main()
else
system("pause");
return 0;
}
//方法二:記憶化搜尋,減支 通過
#includeusing namespace std;
const int number=1000000007;
vector> memot;
vector> memof;
bool isvalid(const string& exp)
for (int i = 0; i < exp.size(); i += 2)
} for (int i = 1; i < exp.size(); i += 2)
} return true;
}long long p(const string& exp, const string& desired, int left, int right)
else
} long long res = 0;
if (desired=="true")
for (int i = left + 1; i < right; i += 2)
else if (exp[i] == '|')
else
} memot[left][right]=res;
} else
for (int i = left + 1; i < right; i += 2)
else if (exp[i] == '|')
else
}
memof[left][right]=res;
}
return res;
}int main()
else
system("pause");
return 0;
}
//方法三:dp o(n^3) o(n^2)
#includeusing namespace std;
const int number = 1000000007;
bool isvalid(const string& exp)
for (int i = 0; i < exp.size(); i += 2)
} for (int i = 1; i < exp.size(); i += 2)
} return true;
}int main()
int n = exp.size();
vector> dpt(n, vector(n, 0));
vector> dpf(n, vector(n, 0));
for (int i = 0; i < n; i += 2)
for (int i = 2; i < n; i += 2)
else if (exp[k + 1] == '|')
else
}} }
if (desired=="true")
else
system("pause");
return 0;
}
注:本體輸入對於c++有陷阱,c++讀入bool值是0和非0,而不是true和false(用true和false輸入後,bool變數輸出都是0)。 計算字串對應表示式的結果
問題描述 以字串的形式給定乙個表示式,表示式中包含一位的數字,加號運算子 減 負 號運算子 以及括號 輸出這個運算子按照四則運算規則運算之後的結果,假定所有給定的表示式都是規範的。測試樣例 輸入 3 9 1 輸出 11 參考 class solution def calculatorhelper s...
使用棧來完成乙個表示式的結果
7 2 2 5 1 5 3 4 3 2 6 2 外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳 img xzpnjzre 1614845779689 通過乙個 index 值 索引 來遍歷我們的表示式 如果我們發現是乙個數字,就直接入數棧 如果發現掃瞄到是乙個符號,就分如下情況 當表示式...
Qt中使用正規表示式返回匹配的所有結果集
python的正則中有findall函式返回乙個所有匹配的結果list.今天在使用qt的時候發現似乎沒有類似的方法.進而自己寫了乙個,如下 brief 獲取所有的匹配結果 param text 要匹配的文字 param regexp 正規表示式串 return 匹配的結果集 qset uploadb...