蓝桥杯c/c++研究生组 填空第二题
作者:
西瓜不加糖
,
2023-04-08 15:48:27
,
所有人可见
,
阅读 370
第14届蓝桥杯初赛C/C++研究生组
填空第二题
#include<bits/stdc++.h>
vector<vector<char>> result;
vector<char> path;
void dfs(string s, int k) {
if (path.size() == k) {
result.push_back(path);
return;
}
for (int i = 0; i < s.size(); i++) {
path.push_back(s[i]);
dfs(s, k);
path.pop_back();
}
}
int subop(int a, int b, char op){
if(op == '|') return a|b;
else if(op =='&') return a&b;
else if(op == '^') return a^b;
}
bool ddd(vector<char> &path){
int a[15];
a[0] = 1;
a[1] = 0;
a[2] = 1;
a[3] = 0;
a[4] = 1;
for(int i =5;i<=8;i++){
a[i] = subop(a[i-5], a[i-4],path[i-5]);
}
for(int i = 9;i<=11;i++){
a[i] = subop(a[i-4], a[i-3], path[i-5]);
}
a[12] = subop(a[9], a[10], path[7]);
a[13] = subop(a[10], a[11], path[8]);
a[14] = subop(a[12], a[13], path[9]);
if (a[14] == 1) return true;
return false;
}
int main() {
string s = "|^&";
dfs(s, 10);
cout<< result.size()<<endl;
ll ans= 0;
for(vector<char> &path : result){
if(ddd(path))
ans++;
}
cout <<ans;
return 0;
}
对的,因为和我答案一样 ,hh
不知道这样做对不对