题目:

数据范围与提示:
在上例中,可能对应的现代表达式为 {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 完全不能确定,也不能输出。
思路:
注:本题解未使用任何面向数据编程的方法。(最优解似乎都是面向数据编程的)
没啥好说的,直接暴搜。
非常重要的优化:
=/+/*/0
这几个直接暴力枚举与那个数匹配,检查是否合法。可以先搜索匹配的顺序,最大化每个位置结尾可检查的字符串。
inline
,这个 O2 似乎没有优化,可以加上。位运算优化。
代码:
#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 du