一道大模拟

代码

#include <cstdio>
#include <iostream>
#include <cstring>
#include <string>
using namespace std; string st[1010];
int value[26];
int f,o,s,i;
int p[1010],num[1010];
int s1[150];
char s2[150];
int t1=0,t2=0;
char c; bool check(char ch){
if((ch>='a'&&ch<='z')||(ch>='0'&&ch<='9')||(ch=='+')||(ch=='-')||(ch=='*')
||(ch=='/')||(ch=='(')||(ch==')')||(ch=='='))
return true;
return false;
} void calcu(){
int x1,x2,x;
char p;
p=s2[t2--];
x2=s1[t1--];
x1=s1[t1--];
switch(p){
case '+' : x=x1+x2; break;
case '-' : x=x1-x2; break;
case '*' : x=x1*x2; break;
case '/' : x=x1/x2; break;
}
s1[++t1]=x;
} void readStr(){
char b;
s++;
int count=0;
scanf("%c",&b);
while(!check(b)) scanf("%c",&b);
while(check(b)){
st[s]=st[s]+b;
if(b=='d')count++;
if(count>20){
st[s]=st[s].substr(0,3);
break;
}
scanf("%c",&b);
}
} int result(string t){
char c;
unsigned i=0;
t1=0,t2=0;
int v;
while(i<t.size()){
c=t[i];
if(c=='+'||c=='-'){
while(t2&&s2[t2]!='(') calcu();
s2[++t2]=c;
i++;
}
else if(c=='*'||c=='/'){
while(t2&&(s2[t2]=='*' || s2[t2]=='/')) calcu();
s2[++t2]=c;
i++;
}
else if(c=='('){
s2[++t2]=c;
i++;
}
else if(c==')'){
while(s2[t2]!='(') calcu();
t2--;
i++;
}
else if(c>='a'&&c<='z'){
s1[++t1]=value[c-'a'];
i++;
}else{
v=0;
do{
v=10*v+c-'0';
c=t[++i];
}while(c>='0'&&c<='9'&&i<t.size());
s1[++t1]=v;
}
}
while(t2) calcu();
return s1[t1];
} int main(){
o=1;
while(o!=0){
readStr();
//cout<<st[s]<<endl;
if(st[s]=="loop") o++;
else if(st[s]=="end") o--;
}
i=2;
f=1;num[1]=1;
while(i<=s){
if(st[i]=="loop"){
f++;
i++;
num[f]=result(st[i]);
i++; p[f]=i;
}
else if(st[i]=="end"){
num[f]--;
if(num[f]==0){
f--;i++;
}else i=p[f];
}
else if(st[i]=="break"){
o=1;
while(o!=0){
i++;
if(st[i]=="loop") o++;
else if(st[i]=="end") o--;
}
num[f]=1;
}else if(st[i]=="continue"){
o=1;
while(o!=0){
i++;
if(st[i]=="loop") o++;
else if(st[i]=="end") o--;
}
}
else if(st[i]=="write"){
i++;
printf("%d\n",result(st[i]));
i++;
}
else{
value[st[i][0]-'a']=result(st[i].substr(2,st[i].size()-2));
i++;
}
}
return 0;
}

[HNOI2002]沙漠寻宝 题解的更多相关文章

  1. BZOJ1588:[HNOI2002]营业额统计——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1588 Description Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务 ...

  2. 洛谷 P1076 寻宝 题解

    今天又TM考试了...... 这是T1,然后我模拟20分滚粗. Analysis 在每层的时候用编号%这层可以上楼的房间个数就行了. #include<iostream> #include ...

  3. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  4. SET || BZOJ 1588: [HNOI2002]营业额统计 || Luogu P2234 [HNOI2002]营业额统计

    题面:P2234 [HNOI2002]营业额统计 题解:随便写写 注意:cmath中abs函数返回的是一个浮点数,在bzoj上会ce 代码: #include<cstdio> #inclu ...

  5. P1076 寻宝

    P1076 寻宝 题解 这道题真是感人啊,废了蒟蒻一天的时间 关键 1. a[ k ][ ] 数组记录第k层有楼梯房间的编号 a[ k ][ 0 ]  第k层有几个有楼梯的房间 a[ k ][ i ] ...

  6. 【题解】Kathy函数 [BZOJ1223] [P2235] [HNOI2002]

    [题解]Kathy函数 [BZOJ1223] [P2235] [HNOI2002] 这几疯狂刷了数位\(dp\)的题,到这道题时被卡了一天,一看大佬的讲解发现居然是求回文数╮(╯_╰)╭ 感觉被大佬狠 ...

  7. [HNOI2018]寻宝游戏(题解转载自别处)

    题解(自别处转载): Luogu CSDN 这题关键是将运算符也替换成0,1 然后在运算符与原串混杂里找规律. 而且替换的方式也有所要求,考场上两种替换方式都要尝试. #include <bit ...

  8. BZOJ5285 & 洛谷4424 & UOJ384:[HNOI/AHOI2018]寻宝游戏——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5285 https://www.luogu.org/problemnew/show/P4424 ht ...

  9. 【题解】 P2234 [HNOI2002]营业额统计

    平衡树板题 原题传送门 这道题要用Splay,我博客里有对Splay的详细介绍 这道题目还算比较模板的 每输入一个数,先不要插入 要求一下前驱和后继与x差的最小值并加到答案中 再把x插入平衡树 然后你 ...

随机推荐

  1. RocketMQ中NameServer的启动

    在RocketMQ中,使用NamesrvStartup作为启动类 主函数作为其启动的入口: public static void main(String[] args) { main0(args); ...

  2. scripts may close only the windows that were opened by it 浏览器JS控制无法关闭当前页面

    非window.open形式打开的子页面用js的window.close在chrome下就会提示scripts may close only the windows that were opened ...

  3. Java模拟并解决缓存穿透

    什么叫做缓存穿透 缓存穿透只会发生在高并发的时候,就是当有10000个并发进行查询数据的时候,我们一般都会先去redis里面查询进行数据,但是如果redis里面没有这个数据的时候,那么这10000个并 ...

  4. Layui多文件上传进度条

    Layui原生upload模块不支持文件上传进度条显示,百度,谷歌找了一下不太适用.后面找到一个别人修改好的JS,替换上去,修改一下页面显示即可使用,一下是部分代码 HTML: <div cla ...

  5. python多线程同步实例分析

    进程之间通信与线程同步是一个历久弥新的话题,对编程稍有了解应该都知道,但是细说又说不清.一方面除了工作中可能用的比较少,另一方面就是这些概念牵涉到的东西比较多,而且相对较深.网络编程,服务端编程,并发 ...

  6. JavaScript数据结构——图的实现

    在计算机科学中,图是一种网络结构的抽象模型,它是一组由边连接的顶点组成.一个图G = (V, E)由以下元素组成: V:一组顶点 E:一组边,连接V中的顶点 下图表示了一个图的结构: 在介绍如何用Ja ...

  7. Yii GridView Ajax 刷新

    Yii GridView  Ajax 刷新,当页面点击一个按钮时,刷新数据. 1.控制器 <?php class privController extends Controller{ publi ...

  8. 【记忆化搜索】掷骰子 hpuoj

    B. 掷骰子 单点时限: 2.0 sec 内存限制: 512 MB 骰子,中国传统民间娱乐用来投掷的博具,早在战国时期就已经被发明. 现在给你 n 个骰子,求 n 个骰子掷出点数之和为 a 的概率是多 ...

  9. Zabbix-绘制动态拓扑图高级篇

    0.官网文档介绍: https://www.zabbix.com/documentation/4.0/manual/config/visualisation/maps/map 一.设备名字使用宏显示 ...

  10. Luogu P5490 扫描线

    模板题,想象一条线从左边扫到右边,只有在矩阵边界才会产生影响,所以我们离散化缩小数据范围,再用线段树维护扫描线上的情况,得出结果 #include<bits/stdc++.h> #defi ...