当前位置: 首页> 健康> 养生 > 天元建设集团有限公司机构代码_网站的功能和作用_网络营销软件大全_2019年 2022疫情爆发

天元建设集团有限公司机构代码_网站的功能和作用_网络营销软件大全_2019年 2022疫情爆发

时间:2025/7/12 15:20:20来源:https://blog.csdn.net/mwssx/article/details/144949306 浏览次数:0次
天元建设集团有限公司机构代码_网站的功能和作用_网络营销软件大全_2019年 2022疫情爆发

题目:


数据范围与提示:

在上例中,可能对应的现代表达式为 {6∗2=12,2=1+1},{6∗4=24,4=2+2},{6∗8=48,8=4+4}。可见,能够确定的对应关系只有 a 对应 6 ,b 对应 ∗ ,d 对应 =,f 对应 + ,应该输出;而 c,e 虽然能够找到对应的现代算符使得等式成立,但没有唯一的对应关系,不能输出。其他古梅算符 g,h…m 完全不能确定,也不能输出。


思路:

注:本题解未使用任何面向数据编程的方法。(最优解似乎都是面向数据编程的)

没啥好说的,直接暴搜。

非常重要的优化:

  1. =/+/*/0 这几个直接暴力枚举与那个数匹配,检查是否合法。

  2. 可以先搜索匹配的顺序,最大化每个位置结尾可检查的字符串。

  3. inline,这个 O2 似乎没有优化,可以加上。

  4. 位运算优化。


代码:

#include <string>
#include <bitset>
#include <vector>
#include <iostream>
// using namespace std;
// #define int long long
int n;
std::string s[1005];
char ch[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '+', '*', '='};
std::bitset<13>bit[13];
int vis[13];
int dui[13];
std::bitset<13>op;
int ok;
int b[1<<13], dp[1<<13];
int ord[13], ap[13];
int ans_ap[13], ans_ord[13], ans_rnk[13];
std::vector<int>f[13];
inline int lowbit(int x){return x & (-x);
}
inline bool check(std::string x){int len = x.size();char a = '=';char b = '+';char c = '*';char d = '0';if(x[0] == a || x[0] == b || x[0] == c || x[len - 1] == a || x[len - 1] == b || x[len - 1] == c)return 0;int num_a = 0;for(int i = 0; i < len; i++){num_a += (x[i] == a);}if(num_a != 1)return 0;for(int i = 1; i < len; i++){if(x[i] == a || x[i] == b || x[i] == c){if(x[i - 1] == a || x[i - 1] == b || x[i - 1] == c){return 0;}}}for(int i = 0; i < len - 1; i++){if(i == 0 || x[i - 1] == a || x[i - 1] == b || x[i - 1] == c){if(x[i] == d){if(x[i + 1] != a && x[i + 1] != b && x[i + 1] != c){return 0;}}}}return 1;
}
inline int js(std::string x){int s = 1;int ans = 0;for(int i = 0; i < x.size(); i++){if('0' <= x[i] && x[i] <= '9'){int sum = 0;while(i + 1 < x.size() && '0' <= x[i + 1] && x[i + 1] <= '9'){sum = sum * 10 + x[i] - '0';i++;}sum = sum * 10 + x[i] - '0';s *= sum;}else if(x[i] == '+'){ans += s;s = 1;}}ans += s;return ans;
}
inline bool solve(std::string s){for(int i = 0; i < s.size(); ++i){s[i] = ch[dui[s[i] - 'a']];}if(!check(s))return 0;for(int i = 0; i < s.size() ;++i){if(s[i] == '='){return js(s.substr(0, i)) == js(s.substr(i + 1));}}
}
inline void dfs(int now){for(auto to : f[now - 1]){if(!solve(s[to]))return;}if(now == 13){ok = 1;for(int i = 0; i < 13; ++i)bit[i][dui[i]] = 1;return;}if(vis[ans_ord[now]]){dfs(now + 1);return;}for(int i = op._Find_first(); i != op.size(); i = op._Find_next(i)){dui[ans_ord[now]] = i;op[i] = 0;dfs(now + 1);op[i] = 1;if(ok)return;}
}
inline bool can(int x, int y){for(int i = 0; i < 13; ++i){op[i] = 1;dui[i] = 0;vis[i] = 0;}vis[x] = 1;dui[x] = y;op[y] = 0;ok = 0;dfs(0);return ok;
}
int he = 0;
inline void dfss(int now){for(int i = 0; i < now; ++i){if(ap[i] < ans_ap[i])return;if(ap[i] > ans_ap[i])break;}if(now == 13){for(int j = 0; j < 13; ++j){ans_ap[j] = ap[j];ans_ord[j] = ord[j];}return;}for(int i = op._Find_first(); i != op.size(); i = op._Find_next(i)){ord[now] = i;op[i] = 0;he ^= (1<<i);ap[now] = dp[he];dfss(now + 1);op[i] = 1;he ^= (1 << i);}
}
signed main(){std :: ios_base :: sync_with_stdio ( false ), std :: cin.tie ( nullptr ), std :: cout.tie ( nullptr ); std::cin >> n;for(int i = 1; i <= n; ++i){std::cin >> s[i];int sum = 0;for(int j = 0; j < s[i].size(); ++j){if(s[i][j] < 'a' || s[i][j] > 'm'){std::cout << "noway" << std::endl;return 0;}sum |= 1<<(s[i][j] - 'a');}b[sum]++;}for(int i = 0; i < 13; i++)op[i] = 1;for(int i = 0; i < (1 << 13); ++i){for(int j = i; j; j = (j - 1) & i){dp[i] += b[j];}}dfss(0);for(int i = 1; i <= n; ++i){int mx = 0;for(int j = 0; j < s[i].size(); ++j){for(int k = 0; k < 13; k++){if(ans_ord[k] == s[i][j] - 'a'){mx = std::max(mx, k);break;}}}f[mx].emplace_back(i);}for(int i = 0; i < 13; ++i)ans_rnk[ans_ord[i]] = i;for(int i = 0; i < 13; ++i){for(int j = 12; j >= 0; --j){if(can(i, j))bit[i][j] = 1;if(bit[i].count() > 1)break;}if(bit[i].count() == 0){puts("noway");return 0;}}for(int i = 0; i < 13; ++i){if(bit[i].count() == 1){std::cout << char('a'+i) << ch[bit[i]._Find_first()] << std::endl;}}return 0;
}

关键字:天元建设集团有限公司机构代码_网站的功能和作用_网络营销软件大全_2019年 2022疫情爆发

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: