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 ...
随机推荐
- Java中String对象两种赋值方式的区别
本文修改于:https://www.zhihu.com/question/29884421/answer/113785601 前言:在java中,String有两种赋值方式,第一种是通过“字面量”赋值 ...
- 2.03-handler_openner
import urllib.request def handler_openner(): #系统的urlopen并没有添加代理的功能所以需要我们自定义这个功能 #安全 套接层 ssl第三方的CA数字证 ...
- Python之Requests库的异常
异常 说明 requests.ConnectionError 网络链接错误一场,如 ...
- Md5的生成
1.使用hashlib包(一) import hashlib src = 'anthing' m1 = hash.new() m1.update(src) print (m1.hexdigest()) ...
- Spring Kafka整合Spring Boot创建生产者客户端案例
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 创建一个kafka-producer-master的maven工程.整个项目结构如下: ...
- 水题:P2799 国王的魔镜
思路:简单模拟即可.判断一下是不是回文,是回文看长度是不是偶数.是偶数的话,说明又可能是回文.依次这样处理.但是只要长度为奇数则一定是原来的长度直接输出即可. #include<iostream ...
- Windows下Redis缓存服务器的使用 .NET StackExchange.Redis Redis Desktop Manager 转发非原创
Windows下Redis缓存服务器的使用 .NET StackExchange.Redis Redis Desktop Manager Redis缓存服务器是一款key/value数据库,读11 ...
- 红米Note5进入全网通5.0时代,其实是高通已经落后了!
高通早在去年12月份就正式发布了新一代的骁龙845处理器,接下来就是人们对于搭载骁龙845处理器的手机充满期待,可是转眼到了2018年的3月份,目前已经发布的高端旗舰新机却只有三星S9和三星S9+,而 ...
- KNN-笔记(2)
1 - kd Tree KD树是一种对K维空间中的实例点进行存储以便对其进行快速检索的树形数据结构.KD树其实就是二叉树,表现为对K维空间的一个划分,构造kd树相当于不断的用垂直于坐标轴的超平面将k维 ...
- 开发手记:JedisConnectionException: Could not get a resource from the pool
对于Redis,生产环境是集群模式,测试环境是单例模式,如果在生产环境中用单例模式会报错. 解决办法,通过云配置,将配置进行自动化配置. 另附一份Redis配置: #***************** ...