ZJU_1145 OR POJ_1100 Dreisam Equations
Dreisam Equations
{ 两个网站的题有点不一样(ZJH有特判)POJ时间卡得紧,建议去POJ过 }
题目大意:
给你一个字符串:是一个等式,等式左边是一个数,右边由若干个数和()构成,要求加入(+、- 或 *)来使得等式成立,注意:这道题抛弃了原本的优先级,除了括号一律采用从左到右的计算顺序。
题目陷阱:
测试数据中可能有 2= (1)(1) 或者 2=((1)1) ,不一定只是在空格处加符号。
题目思路:
可以对原字符串进行加工,也就是先预先处理空格,不过这样子比较麻烦,可以考虑到,符号只能加在以下四种情况:
1. 数字 和 数字 之间
2. 数字 和 ( 之间
3. ) 和 数字 之间
4. ) 和 ( 之间
这样子分情况以后就容易了许多,可以遍历一遍字符串,将数字存到num数组,( 当作 -1,)当作 -2,有可能加符号的地方当作 -3;
然后深入优先搜索,遍历所有可能,因为最多等号右边12个数,也就是最多11个符号,也就是3的11次方,基本不会超时。
AC 代码:(两个网站的题 long long 的格式不一样,所以%I64d 可能需要改下)
- #include<stdio.h>
- typedef long long LL;
- LL sum;
- LL num[],no;
- LL st[],so;
- char tt[];
- LL to;
- void push(LL x)
- {
- if(to==||to>&&tt[to-]=='(') st[so++]=x;
- else
- {
- switch(tt[to-])
- {
- case '+':st[so-]=st[so-]+x;break;
- case '-':st[so-]=st[so-]-x;break;
- case '*':st[so-]=st[so-]*x;break;
- default: break;
- }
- to--;
- }
- }
- // -4 +
- // -5 -
- // -6 *
- bool dfs(int pos)
- {
- if(pos>=no)
- {
- if(st[so-]==sum) return true;
- else return false;
- }
- if(num[pos]==-)
- {
- LL Sst[],Sso=so;
- for(int i=;i<so;i++)
- Sst[i]=st[i];
- char Stt[];
- LL Sto=to;
- for(int i=;i<to;i++)
- Stt[i]=tt[i];
- num[pos]=-;
- tt[to++]='+';
- if(dfs(pos+)) return true;
- so=Sso;
- for(int i=;i<so;i++)
- st[i]=Sst[i];
- to=Sto;
- for(int i=;i<to;i++)
- tt[i]=Stt[i];
- num[pos]=-;
- tt[to++]='-';
- if(dfs(pos+)) return true;
- so=Sso;
- for(int i=;i<so;i++)
- st[i]=Sst[i];
- to=Sto;
- for(int i=;i<to;i++)
- tt[i]=Stt[i];
- num[pos]=-;
- tt[to++]='*';
- if(dfs(pos+)) return true;
- num[pos]=-;
- }
- else if(num[pos]==-)
- {
- tt[to++]='(';
- if(dfs(pos+)) return true;
- }
- else if(num[pos]==-)
- {
- to--;
- so--;
- push(st[so]);
- if(dfs(pos+)) return true;
- }
- else
- {
- push(num[pos]);
- if(dfs(pos+)) return true;
- }
- return false;
- }
- int main()
- {
- char s[];
- int cas=;
- while(gets(s))
- {
- if(s[]==''&&s[]==) break;
- int i=;
- no=;
- for(;s[i];i++)
- {
- if(s[i]<=''&&s[i]>='')
- {
- if(no>&&num[no-]!=-) num[no++]=-;
- num[no]=;
- for(;s[i]<=''&&s[i]>='';i++)
- {
- num[no]=num[no]*+s[i]-'';
- }
- no++;
- i--;
- }
- else if(s[i]=='(')
- {
- if(no>&&num[no-]!=-) num[no++]=-;
- num[no++]=-;
- }
- else if(s[i]==')')
- {
- num[no++]=-;
- }
- }
- sum=num[];
- so=to=;
- printf("Equation #%d:\n",cas++);
- if(!dfs())
- {
- printf("Impossible\n\n");
- }
- else
- {
- printf("%I64d=",sum);
- for(int i=;i<no;i++)
- {
- if(num[i]>=) printf("%I64d",num[i]);
- else
- {
- switch(num[i])
- {
- case -:printf("(");break;
- case -:printf(")");break;
- case -:printf("+");break;
- case -:printf("-");break;
- case -:printf("*");break;
- default:break;
- }
- }
- }
- printf("\n\n");
- }
- }
- return ;
- }
ZJU_1145 OR POJ_1100 Dreisam Equations的更多相关文章
- 【解题报告】zju-1145 Dreisam Equations
原题地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=145 题目大意:在给定的等式右边数字之间加上加.减.乘运算符,使等式成 ...
- 狗狗40题~(Volume B)
H - Sorting Slides 应该是个二分匹配的模板题的,但我还不会写 = = 其实数据规模很小,就用贪心的方法就水过了(没加vis判冲突wa了几发,从此开始艰难的没有1A 的生活) #inc ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- A.Kaw矩阵代数初步学习笔记 5. System of Equations
“矩阵代数初步”(Introduction to MATRIX ALGEBRA)课程由Prof. A.K.Kaw(University of South Florida)设计并讲授. PDF格式学习笔 ...
- [家里蹲大学数学杂志]第269期韩青编《A Basic Course in Partial Differential Equations》 前五章习题解答
1.Introduction 2.First-order Differential Equations Exercise2.1. Find solutons of the following inti ...
- Represent code in math equations
Introduce The article shows a way to use math equations to represent code's logical. Key ideas logic ...
- EM basics- the Maxwell Equations
All the two important problems that the EM theory trys to describe and explain are propogation and r ...
- FITTING A MODEL VIA CLOSED-FORM EQUATIONS VS. GRADIENT DESCENT VS STOCHASTIC GRADIENT DESCENT VS MINI-BATCH LEARNING. WHAT IS THE DIFFERENCE?
FITTING A MODEL VIA CLOSED-FORM EQUATIONS VS. GRADIENT DESCENT VS STOCHASTIC GRADIENT DESCENT VS MIN ...
- ACM题目————Equations
Description Consider equations having the following form: a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 a, b, c, d a ...
随机推荐
- RandomAccess
在List集合中,我们经常会用到ArrayList以及LinkedList集合,但是通过查看源码,就会发现ArrayList实现RandomAccess接口,但是RandomAccess接口里面是空的 ...
- 【转】vmware的macos中apple ID一直登陆不上解决 ---(伪造smbios设备信息)
伪造smbios设备信息 原文网址:http://www.insanelymac.com/forum/topic/292170-how-to-spoof-real-mac-in-vmware/page ...
- ①---Java开发环境配置
Java 开发环境配置 以下将为大家介绍如何搭建Java开发环境. window系统安装java 下载JDK 首先我们需要下载java开发工具包JDK,下载地址:http://www.oracle.c ...
- PyCharm 中使用 Pylint 控制代码质量
1) Pylint安装 - Windows下: 直接在 cmd 下使用 pip install pylint 即可(如果 pip 不可用,首先安装最新版 Python,会默认安装 pip,或者找到 p ...
- day13----迭代器、生成器、枚举对象
一.迭代器: 定义: (从装有多个值的容器中一次取出一个值给外界) 器:迭代器是个容器,包含多个值 迭代:循环反馈,从容器中一次取出一个值 迭代器不同于索引取值,但是也可以从容器对象中从前往后逐个返回 ...
- ftp环境搭建并创建虚拟用户
1. 首先安装ftp yum install -y vsftpd 2. 修改配置文件 cd /etc/vsftpd /etc/vsftpd/vsftpd.conf //主配置文件,核心配置文件 / ...
- python调用数据返回字典dict数据的现象2
python调用数据返回字典dict数据的现象2 思考: 话题1连接:https://www.cnblogs.com/zwgbk/p/10248479.html在打印和添加时候加上内存地址id(),可 ...
- CF434D Nanami's Power Plant 最小割
传送门 因为连距离限制的边的细节调了贼久QAQ 这个题和HNOI2013 切糕性质相同,都是有距离限制的最小割问题 对于每一个函数,用一条链记录变量\(x\)在不同取值下这个函数的贡献.对于一个\(x ...
- C# 生成编号(防并发)
今天抽了点时间,写了一个通用的生成编号的程序! 我的生成规则为年月日+两位编号,即:yyyyMMdd+两位编号,譬如:2018101001 / 2018101002 / 2018101003 首先,一 ...
- 前后端分离的利器:fiddler的实用功能举例
# 前后端分离的利器:fiddler的实用功能举例 ##what's fiddler fiddler是一款代理软件,对于前后端分离开发非常重要.可以说,如果前端开发没有用上fiddler或类似软件,那 ...