洛谷 P2027 bf
2024-09-07 23:09:07
题目描述
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++;
}
}
最新文章
- xp和win7安装telnet服务
- PHP 对象 “==” 与 “===”
- 网页JQ基础之jq-隐藏以及显示特效
- linux安装-版本选择-终极决定
- WCF技术的不同应用场景及其实现分析
- JavaScript获取元素尺寸和大小操作总结
- (转)assert()函数用法总结
- SOA和NS区别
- 瞬间从IT屌丝变大神——命名规则
- Increase SharePoint Execution Timeout
- jquery 分页控件(一)
- jQuery 源码分析2: jQuery.fn.init
- HDOJ 1081(ZOJ 1074) To The Max(动态规划)
- Inorder Successor in BST 解答
- ALLEN-XIE
- vs2010 项目编译 ResGen.exe”已退出,代码为 -1073741701
- 【转】Android 系统菜单与自定义菜单
- 如何创建自定义ASP.NET MVC5脚手架模板?
- WinForm笔记
- 解决NTPD漏洞,升级Ntpd版本
热门文章
- 51nod-字符串连接
- Linux150个命令
- CSS变量实用指南及注意事项
- 论文阅读《End-to-End Learning of Geometry and Context for Deep Stereo Regression》
- WPF原生环形图表
- 华硕VX50V开机老是进入bios
- c#将List&;lt;T&;gt;转换成DataSet
- Go语言Slice操作.
- silverlight wpf Command提交时输入验证
- m_Orchestrate learning system---十一、thinkphp查看临时文件的好处是什么