[HNOI2002]沙漠寻宝 题解
一道大模拟
代码
#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]沙漠寻宝 题解的更多相关文章
- BZOJ1588:[HNOI2002]营业额统计——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1588 Description Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务 ...
- 洛谷 P1076 寻宝 题解
今天又TM考试了...... 这是T1,然后我模拟20分滚粗. Analysis 在每层的时候用编号%这层可以上楼的房间个数就行了. #include<iostream> #include ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- SET || BZOJ 1588: [HNOI2002]营业额统计 || Luogu P2234 [HNOI2002]营业额统计
题面:P2234 [HNOI2002]营业额统计 题解:随便写写 注意:cmath中abs函数返回的是一个浮点数,在bzoj上会ce 代码: #include<cstdio> #inclu ...
- P1076 寻宝
P1076 寻宝 题解 这道题真是感人啊,废了蒟蒻一天的时间 关键 1. a[ k ][ ] 数组记录第k层有楼梯房间的编号 a[ k ][ 0 ] 第k层有几个有楼梯的房间 a[ k ][ i ] ...
- 【题解】Kathy函数 [BZOJ1223] [P2235] [HNOI2002]
[题解]Kathy函数 [BZOJ1223] [P2235] [HNOI2002] 这几疯狂刷了数位\(dp\)的题,到这道题时被卡了一天,一看大佬的讲解发现居然是求回文数╮(╯_╰)╭ 感觉被大佬狠 ...
- [HNOI2018]寻宝游戏(题解转载自别处)
题解(自别处转载): Luogu CSDN 这题关键是将运算符也替换成0,1 然后在运算符与原串混杂里找规律. 而且替换的方式也有所要求,考场上两种替换方式都要尝试. #include <bit ...
- BZOJ5285 & 洛谷4424 & UOJ384:[HNOI/AHOI2018]寻宝游戏——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=5285 https://www.luogu.org/problemnew/show/P4424 ht ...
- 【题解】 P2234 [HNOI2002]营业额统计
平衡树板题 原题传送门 这道题要用Splay,我博客里有对Splay的详细介绍 这道题目还算比较模板的 每输入一个数,先不要插入 要求一下前驱和后继与x差的最小值并加到答案中 再把x插入平衡树 然后你 ...
随机推荐
- Transformations 方块转换 USACO 模拟 数组 数学 耐心
1006: 1.2.2 Transformations 方块转换 时间限制: 1 Sec 内存限制: 128 MB提交: 10 解决: 7[提交] [状态] [讨论版] [命题人:外部导入] 题目 ...
- MemCached的工具类。获取cached中的所有key
package com.ibs.auth.controller; import java.io.UnsupportedEncodingException; import java.util.Date; ...
- wamp不显示文件图标
wamp不显示文件图标 效果如下图 右键图片"在新的标签页打开图片"后会跳转到404页面,并显示The requested URL /icons/unknown.gif was n ...
- web渗透---第二天
协议常识 HTTP协议 百度百科的解释:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议. 所有的WWW文件都必须遵守这个标准. ...
- Thrift框架快速入门
Thrift介绍1.什么是thrift?thrift早期由facebook内部团队开发,主要用于实现跨语言间的方法调用,属于远程方法调用的一种,后开源纳入apache中,成为了apache thrif ...
- 最全面的改造Zuul网关为Spring Cloud Gateway(包含Zuul核心实现和Spring Cloud Gateway核心实现)
前言: 最近开发了Zuul网关的实现和Spring Cloud Gateway实现,对比Spring Cloud Gateway发现后者性能好支持场景也丰富.在高并发或者复杂的分布式下,后者限流和自定 ...
- Linux学习之自动配置部署——初用expect
主机A连接主机B 免密登陆 + 自动部署 expect实现自动的交互式任务 ——— send 向进程发送字符串(输入) ——— expect 从进程接受字符串 ——— spawn 启动新进程 ——— ...
- .net core使用MQTT
废话不多说,我们来直接实践…… 一.搭建mqtt控制台服务端 新建一个.net core控制台项目,然后使用Nuget添加MQTTnet包,我这里使用2.4版本,注意不同版本,代码写法不相同,如下图 ...
- Cannot attach the file “MvcMovie.mdf” as database “aspnet-MvcMovie”
今天在微软开发人员官网上学习asp.net mvc5入门的时候,遇到一个棘手的问题,我是按照教程一步一步操作的,但期间遇到一个自己觉得莫名其妙的问题,教程中也没有提到这个, 在添加新字段这一章节,跟着 ...
- .Net Core in Docker - 使用阿里云Codepipeline及阿里云容器镜像服务实现持续集成(CI)
前面已经介绍过了 .Net Core 程序发布到 Docker 容器的内容.但是每次通过 SSH 链接到服务器敲命令,运行脚本也是挺麻烦的一件事.程序员是最懒的,能让电脑解决的问题绝不手动解决,如果当 ...