算符破译C++

题目:


数据范围与提示:

在上例中,可能对应的现代表达式为 {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 du
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值