洛谷 P2027 bf
题目描述
bf是一种编程语言,全称为BrainFuck,因为题目名称不能太露骨,所以就简写成bf了。
这种语言的运行机制十分简单,只有一个大小为30000的有符号8位整数(范围[-128,127])的内存槽,和一个指向内存槽中位置的指针,在最初的时候指向内存槽的第一个整数。
这种语言的字符集也是十分的简单,只有+-,.><[]。
字符|意义
< |指针所指向的内存地址减一。
> |指针所指向的内存地址加一。
+ |指针所指向的内存里面的数值加一。
- |指针所指向的内存里面的数值减一。
. |输出当前指针所指向的内存里面的数值(以字符形式输出)。
, |将读入缓冲区中的一个字节送入当前指针指向的内存里面。如果读入缓冲区为空则送入-1。
[ |当前指针指向的内存里面的数值不为0时,重复执行与之相匹配的]之间的语句,直到回到[时当前指针指向的内存中的数值为0。
] |如上。
输入输出格式
输入格式:
输入数据若干行,代码有注释。直到一个$为代码截止。
$后面紧跟一个空格(不属于输入缓冲区),空格后面是输入缓冲区里面的内容,以一个空格和一个$截止。
输出格式:
输出这段代码的执行结果。
输入输出样例
说明
【数据范围】
对于10%的数据,没有循环。
对于另外10%的数据,循环没有嵌套。
对于100%的数据,输入的程序不会访问越界,输入的程序能够在10^6步内运行结束,|输入的字符串|<=30000。 字符在内存中的数值为字符所对应的Ascii码。
思路:模拟。
但是太麻烦了,所以就去copy了一下大佬的思路。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
char codes[];
char inputs[];
signed char data[]={};
int down[],up[],tstack[];
char t;
signed char * pdata;
int main(){
int i=,j=,k=,ncodes,ninputs; //i记录codes的索引,j记录inputs的索引,k记录tstack的索引
while((t=getchar())!='$')
if(strchr("><.,+-[]",t))
codes[i++]=t;
ncodes=i; //为代码的总字符数
codes[ncodes]='\0';
getchar();//跳过'$'后的空格
while((t=getchar())!='$') inputs[j++]=t;
ninputs=j-;
inputs[ninputs]='\0';
//读入完成,开始预处理
for(i=;i<ncodes;i++){
switch(codes[i]){
case '[': tstack[k++]=i; break;
case ']': down[tstack[--k]]=i; up[i]=tstack[k]; break;
}
}
//预处理完成,开始解释
i=,j=,pdata=data; //索引、数据指针归零
while(i<ncodes){//遍历代码
switch(codes[i]){
case '<': pdata--; break;
case '>': pdata++; break;
case '.': putchar(*pdata); break;
case ',': if(j<ninputs) *pdata=inputs[j++];
else *pdata=-;//此时已读完输入缓冲,置为-1
break;
case '+': (*pdata)++; break;
case '-': (*pdata)--; break;
case '[': if(!(*pdata)) i=down[i]; break;
case ']': if(*pdata) i=up[i]; break;
}
i++;
}
}
洛谷 P2027 bf的更多相关文章
- bzoj 3236: 洛谷 P4396: [AHOI2013]作业 (莫队, 分块)
题目传送门:洛谷P4396. 题意简述: 给定一个长度为\(n\)的数列.有\(m\)次询问,每次询问区间\([l,r]\)中数值在\([a,b]\)之间的数的个数,和数值在\([a,b]\)之间的不 ...
- 洛谷 P3263 [JLOI2015]有意义的字符串
洛谷 首先,看到\((\frac{(b+\sqrt{d})}{2})^n\),很快能够想到一元二次方程的解\(\frac{-b\pm\sqrt{\Delta}}{2a}\). 所以可以推出,\(\fr ...
- (洛谷 P1429 平面最近点对(加强版) || 洛谷 P1257 || Quoit Design HDU - 1007 ) && Raid POJ - 3714
这个讲的好: https://phoenixzhao.github.io/%E6%B1%82%E6%9C%80%E8%BF%91%E5%AF%B9%E7%9A%84%E4%B8%89%E7%A7%8D ...
- bzoj2154||洛谷P1829 Crash的数字表格&&JZPTAB && bzoj3309 DZY Loves Math
bzoj2154||洛谷P1829 https://www.lydsy.com/JudgeOnline/problem.php?id=2154 https://www.luogu.org/proble ...
- 洛谷P2661 信息传递(最小环,并查集)
洛谷P2661 信息传递 最小环求解采用并查集求最小环. 只适用于本题的情况.对于新加可以使得两个子树合并的边,总有其中一点为其中一棵子树的根. 复杂度 \(O(n)\) . #include< ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP
题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...
随机推荐
- springboot---web 应用开发-文件上传
一.Spring Boot 默认使用 springMVC 包装好的解析器进行上传 二.添加代码 <form method="POST" enctype="multi ...
- windows关于定时执行的php脚本
根据业务需求,需要服务器每天定时执行一些脚本,如后台提交数据,定时处理数据库等. 最初的思路是在某个控制器里写好方法,加入code验证,定期的用计划任务去访问.由于window计划任务这方面比较low ...
- WCF与WEB API区别
- Ubuntu PostgreSql主从切换
主机:192.168.100.70 从机:192.168.100.71 通用配置(即主从都要配置) 修改/etc/postgresql/10/main/pg_hba.conf host all all ...
- spring boot pom
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- 关于amd64和ia64的理解
关于amd64和ia64的理解 学习了:http://blog.csdn.net/zubin006/article/details/5060383 IA64指的是Intel安腾系列CPU,不是X86架 ...
- 通过 KVM+virt-manager配置双屏虚拟机(两套键盘。鼠标)
感谢朋友支持本博客,欢迎共同探讨交流,因为能力和时间有限,错误之处在所难免,欢迎指正! 假设转载.请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...
- 【LeetCode-面试算法经典-Java实现】【058-Length of Last Word (最后一个单词的长度)】
[058-Length of Last Word (最后一个单词的长度)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a string s consis ...
- bzoj1082: [SCOI2005]栅栏(二分答案搜索判断)
1082: [SCOI2005]栅栏 题目:传送门 题解: 是不是一开始在想DP?本蒟蒻也是qwq,结果很nice的错了ORZ 正解:二分+搜索 我们可以先把两种木材都进行排序,那么如果需要的最大木材 ...
- JAVA设计模式之【策略模式】
策略模式 定义一些独立的类来封装不同的算法 类似于common方法或者引用类 角色 环境类Context 抽象策略Strategy 具体策略ConcreteStrategy 重构伴随着设计模式 重构类 ...