A 表达式求值

表达式求值:可以用递归求解,也可以用栈模拟,考过多次。

类似题目:NYOJ305,NYOJ35

用栈模拟做法:


#include <stdio.h>
#include <string.h>
#include <stack>
using namespace std;
stack<int> dsta;//数据栈
stack<char> osta;//字符栈
char s[1005];
int main()
{
int T,i,j;
scanf("%d",&T);
while(T--)
{
scanf("\n%s",&s[1]);
int len=strlen(&s[1]);
s[0]='('; s[++len]=')';//在给定的表达式两端添加上一对括号
for(i=0;i<=len;i++)
{
if(s[i]=='(')
osta.push(s[i]);
else if(s[i]=='S')
{
osta.push('(');//压入一个左括弧
i+=3;
}
else if(s[i]>='0' && s[i]<='9')
{
int v=0;
while(s[i]>='0' && s[i]<='9')
v=v*10+(s[i++]-'0');
i--;
dsta.push(v);
}
else if(s[i]=='+')
{
while(osta.top()!='(' && osta.top()!=',')
{
int a=dsta.top(); dsta.pop();
int b=dsta.top(); dsta.pop();
int c;
switch(osta.top())
{
case '+':c=b+a;break;
case '*':c=b*a;break;
}
dsta.push(c);
osta.pop();
}
osta.push(s[i]);
}
else if(s[i]=='*')
{
if(osta.top()=='*')
{
int a=dsta.top(); dsta.pop();
int b=dsta.top(); dsta.pop();
dsta.push(b*a);
osta.pop();
}
osta.push(s[i]);
}
else if(s[i]==')' || s[i]==',')//遇到逗号及时求值
{ //当遇到 ','时,就把Smax的前半部分表达式的值求出来 //运算符号 都在这里计算 + - * / smax自定义
while(osta.top()!='(')
{
int a=dsta.top(); dsta.pop();
int b=dsta.top(); dsta.pop();
int c,suma=0,sumb=0;
switch(osta.top())
{
case '+':c=b+a;break;
case '*':c=b*a;break;
case ',':{
//逐位分割求和
while(b!=0)
{
sumb+=b%10; b/=10;
}
while(a!=0)
{
suma+=a%10; a/=10;
}
c=max(suma,sumb);
break;
}
}
dsta.push(c);
osta.pop();
}
osta.pop();
if(s[i]==',')//求完值之后,把逗号压入栈内,以便后半部分Smax表达式的求值
osta.push(s[i]);
}
}
printf("%d\n",dsta.top());
dsta.pop();
}
return 0;
}

B 宣传墙

状压dp 推状态转移

或者用矩阵快速幂优化

网上代码看不懂。。。

C 信道安全

单源点的最短路修改版,用dijkstra做,初始化dist数组和松弛改一下就可以了。

D 导弹发射

LIS的二分写法,数据量1e5 O(N^2)的会超时。

另外题目中说的 导弹一直在前进,不能以原来的X/Y轴作为坐标轴了,需要坐标变换以两条射线为坐标轴

E 机器设备

我用bfs搜索做的,从原点(0,0)开始搜,每次将与当前点相切的圆心齿轮加入到队列,这里的相切意思是:两个圆心距离等于两个圆半径和

F Decimal integer conversion

题意:给一个十进制数 的二进制数 和一个 三进制数,其中各有一位是错的,求正确的十进制数

枚举一下就可以了,二进制和三进制 转成10进制后出现相同的数就是答案

G Prototypes analyze

一个二叉搜索树,问形状有多少个。

明天看题解,学会建树吧......

jBST二叉搜索树的创建 参考博客:https://blog.csdn.net/stpeace/article/details/9067029

nyoj1278 题解参考博客:https://blog.csdn.net/baidu_35643793/article/details/70792326

这道题 题意就是 判断二叉排序树的形状有多少个不一样。

首先 建树 就用上面的板子。

然后就是 判断形状:只需要各个位置是否对应一致有值就行了(如果一颗树在这个地方是空的,那么另一颗树要想与它形状相同,这个地方也必须是空的)

//BST二叉搜索树;
#include<cstdio>
#include<iostream>
using namespace std; int flag; typedef struct Node
{
int key;
struct Node *lChild,*rChild;
} Node,*BST; bool BSTInsert(Node * &p,int element)
{
if(p==NULL)
{
p=new Node;
p->key=element;
p->lChild=p->rChild=NULL;
return true;
}
if(element==p->key)
return false;
if(element<p->key)
return BSTInsert(p->lChild,element);
return BSTInsert(p->rChild,element);
} void judge(BST T1,BST T2) //判断形状;
{
if(T1==NULL&&T2==NULL)
return;
else if(T1&&T2)
{
judge(T1->lChild,T2->lChild);
judge(T1->rChild,T2->rChild);
}
else
flag=0;
} int main()
{
int t,n,k,x;
BST tree[55]; scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&k);
for(int i=0; i<n; i++)
{
BST T=NULL;
for(int j=0; j<k; j++) //建树;
{
scanf("%d",&x);
BSTInsert(T,x);
}
tree[i]=T;
} //找形状种类数;
int ans=0;
for(int i=0; i<n; i++)
{
int flog=1;
for(int j=i+1; j<n; j++)
{
flag=1;
judge(tree[i],tree[j]);
if(flag)
{
flog=0;
break;
}
}
if(flog)
++ans;
}
printf("%d\n",ans);
}
return 0;
}

最新文章

  1. Zepto 使用过程中遇到的问题总结
  2. 【web前端面试题整理05】做几道前端面试题休息休息吧
  3. 关于使用struts2时子窗体页面跳转后在父窗体打开的问题以及Session过期后的页面跳转问题
  4. AChartEngine使用View显示图表
  5. php 数组排序 sort asort ksort
  6. 编译android程序时DEX过程出现错误
  7. Test a ; vs Test a( ) ;
  8. iframe框架自适应高度 uncanght SecurityError: Blocked a frame with origin &quot;null&quot; from accessing a frame ....
  9. UML视图(四)状态图
  10. 用angularjs开发下一代web应用(二):angularjs应用骨架(二)
  11. 大约session_cached_cursors在不同的db在默认不同的版本号
  12. BZOJ 1046: [HAOI2007]上升序列【贪心+二分状态+dp+递归】
  13. 仿百度糯米TP5项目笔记
  14. XamarinSQLite教程创建数据表
  15. 20175316盛茂淞 2018-2019-2 《Java程序设计》第2周学习总结
  16. 附005.Docker Compose文件详解
  17. 使用log4net将C#日志发送到Elasticsearch
  18. 普林斯顿数学指南(第三卷) (Timothy Gowers 著)
  19. python中numpy.sum()函数
  20. robot framework踩坑记录

热门文章

  1. Pwnable-bof
  2. 【day06】PHP
  3. A1089 Insert or Merge (25 分)
  4. springcloud源码分析(一)之采用redis实现注册中心
  5. QSS QPushButton:hover :pressed ...为状态下变更字体颜色(color)无效,变成字体粗细(font-weight)有效???
  6. 环境变量对于 VS 有什么用?
  7. python3爬虫筛选所需要数据
  8. VS2013(InstallShield2015LimitedEdition)打包程序详解
  9. 千万级MySQL数据库建立索引,提高性能的秘诀
  10. Java自学-集合框架 泛型Generic