【问题描述】
小 M 在做数学作业的时候遇到了一个有趣的问题:有一个长度为 n 的数字
串 S,小 M 需要在数字之间填入若干个“+”和恰好一个“=”,使其成为一个
合法的等式。如对于 S=“2349”,可以通过添加 2个“+”和 1 个“=”成为
“2+3+4=9”。
小 M 发现有些数字串是无法通过添加符号成为一个合法的等式的,她想知
道对于每一个给定的数字串 S,是否可以通过添加符号使之成为一个合法的等
式(允许前导 0)?
【输入】
第一行为数据组数 T,表示有 T组输入数据。
接下来 T行每行一个数字串 S。
【输出】
对于每组数据,若 S可以成为合法的等式,输出“Yes”,否则输出
“No”,以单行回车隔开。
【输入输出样例】
4
2349
233233
122323
2344322322
Yes
Yes
No
Yes
【输入输出样例解释】
2+3+4=9
233=233
2+34=4+3+2+2+3+22
【数据范围】
对于 50%的数据:1 ≤ T ≤ 3,1 ≤ n ≤ 4。
对于 100%的数据:1 ≤ T ≤ 5,1 ≤ n ≤ 10。


本题纯正dfs,代码并不是很难。

用状态压缩更优,但直接dfs也能过。

#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
using namespace std;
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define mp make_pair
#define pb push_back
#define xx first
#define yy second
typedef long long ll;
typedef pair<int,int> pii;
inline int read() {int x=0,f=1;char c=getchar();for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;for(;isdigit(c);c=getchar()) x=x*10+c-'0';return x*f;
}
const int maxn=10;
char s[maxn];
int n;
int solve() {scanf("%s",s+1);n=strlen(s+1);rep(x,1,n-1) {rep(S,0,(1<<n-1)-1) {int left=0,cur=0,right=0;rep(i,1,x) {cur=cur*10+s[i]-'0';if(S>>i-1&1) left+=cur,cur=0;}left+=cur;cur=0;rep(i,x+1,n) {cur=cur*10+s[i]-'0';if(S>>i-1&1) right+=cur,cur=0;}right+=cur;cur=0;if(left==right) return 1;}}return 0;
}
int main() {freopen("equation.in","r",stdin);freopen("equation.out","w",stdout);int T=read();while(T--) puts(solve()?"Yes":"No");return 0;
}

转载于:https://www.cnblogs.com/mxrmxr/p/9794076.html

小 M 的算式(dfs)相关推荐

  1. 数独小项目开篇:DFS解决数独难题

    数独小项目开篇:DFS解决数独难题 前言 DFS解决数独问题思路 代码实现细节 样例测试 总结 Reference 前言   这周小刀是挺忙的,周末加班,哎,谁不是996呢?(打工魂燃烧吧~   这次 ...

  2. 小 Biu 的旅行(dfs)

    题目描述 小Biu所在的城市有n个景点,有一些景点之间有单向联通的道路,现在小Biu在1号景点上,他想知道到达除了1号景点之外的每个景点分别最少需要经过多少条道路? 如图所示为样例数据,可以知道小Bi ...

  3. Java 第十一届 蓝桥杯 省模拟赛 小明植树(DFS)

    小明植树 题目 问题描述 小明和朋友们一起去郊外植树,他们带了一些在自己实验室精心研究出的小树苗. 小明和朋友们一共有 n 个人,他们经过精心挑选,在一块空地上每个人挑选了一个适合植树的位置,总共 n ...

  4. 【HDU3949 + BZOJ2115 + CF724G】【异或线性基例题】| 倍增 | 第k小异或和 | DFS处理环 |【CGWR】| N

    三道关于异或线性基的有趣的题目 [1] HDU 3949. XOR Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/3276 ...

  5. ACM 小蝌蚪安家 简单DFS

    描述 在一个矩形区域内,有些地方有水,有些地方没水.所有相邻的有水的地方会共同组成一个水洼,小蝌蚪想在这块区域中找到一个最大的水洼来安家. 输入 有多组输入数据,每组第一行包含两个正整数n,m(n,m ...

  6. hrbust 1614 小z的地图 dfs

    小z的地图 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 101(30 users) Total Accepted: 28(24 us ...

  7. 1916. 统计为蚁群构筑房间的不同顺序 费马小定理+快速幂+DFS

    1916. 统计为蚁群构筑房间的不同顺序 你是一只蚂蚁,负责为蚁群构筑 n 间编号从 0 到 n-1 的新房间.给你一个 下标从 0 开始 且长度为 n 的整数数组 prevRoom 作为扩建计划.其 ...

  8. [蓝桥杯2016初赛]凑算式-dfs,next_permutation

    代码如下: #include <iostream> using namespace std; const int N = 15; bool st[N]; double a[N];int c ...

  9. 蓝桥杯2017初赛-9数算式-dfs

    题目描述 观察如下的算式:9213 x 85674 = 789314562 左边的乘数和被乘数正好用到了1~9的所有数字,每个1次. 而乘积恰好也是用到了1~9的所有数字,并且每个1次. 请你借助计算 ...

最新文章

  1. 【怎样写代码】工厂三兄弟之工厂方法模式(一):问题案例
  2. java 两个值对换_java将两个整型变量值进行互换的几种实现方法
  3. 无法为新的Android ActionBar支持找到Theme.AppCompat.Light
  4. JNDI 笔记(一) 概述
  5. class中一个小技巧
  6. 帧同步_什么是帧同步什么是状态同步
  7. mysql+性能优化+命令_MySQL性能优化
  8. 建立一个通讯录的结构记录,包括姓名、年龄、电话号码
  9. 《现代操作系统》精读与思考笔记 第七章 多媒体
  10. 浅谈LTE技术及实际应用方案
  11. python爬虫模拟登录人人网
  12. 大数据分析四大分析要素
  13. 『TensorFlow』批处理类
  14. erlang随机数问题
  15. 10月8日提交的结对编程工程中的经验和教训
  16. 公钥加密数字签名证书的原理总结
  17. 惠州VOCs实验室建设:日常废气处理工艺
  18. linux磁盘文件检查修复工具下载,Linux磁盘坏道的检测及修复
  19. 澤天夬 (易經大意 韓長庚)
  20. 众筹源码 php,助创cms众筹源码系统v1.0

热门文章

  1. SQL Serve 查询所有可用的数据库语句
  2. google站长管理工具
  3. jdk1.8新特性之lambda表达式及在Android Studio中的使用举例
  4. 《SolidWorks 2017中文版机械设计从入门到精通)》——1.6 参考基准轴
  5. jquery工具方法parseJSON
  6. ubuntu下定时任务的执行
  7. nyoj116士兵杀死(两)段树单点更新
  8. PHP实现对MongoDB的基础操作
  9. Java编程思想—第十二十三章
  10. 一个 冒泡排序 和 选择排序 的简单c程序