心路记录——刷题失败有感

来源:互联网 发布:字体转换器软件下载 编辑:程序博客网 时间:2024/06/03 18:43

首先看看题吧。毕竟花了一晚上没做出(超时)肯定是算法不行了。越错我就越来越膜拜那些dalao们呐

先%lyric_seraph 大神 (1unsigned long long << 63)-1次!!

 BF

时间限制:2000MS  内存限制:65535K

Description

不知道看到标题的大家觉得这个是有关什么的题目呢,估计会认为是Boy Friend的缩写之类的吧。嗯,其实我想表达的是Brainfuck‎_(:з」∠)_。Brainfuck是一种编程语言,虽然它很难看懂,但是它可以完成任何计算操作。下面说明摘自wiki。这个语言是基于一个简单的机器模型,除了指令,这个机器还包括:一个以字节为单位、被初始化为零的数组、一个指向该数组的指针(初始时指向数组的第一个字节)、以及用于输入输出的两个字节流。整个语言只有8条指令:字符含义>指针加一<指针减一+指针指向的字节的值加一-指针指向的字节的值减一.输出指针指向的单元内容(ASCII码),输入内容到指针指向的单元(ASCII码)[如果指针指向的单元值为零,向后跳转到对应的]指令的下一指令处]如果指针指向的单元值不为零,向前跳转到对应的[指令的下一指令处如果把这些指令对应c语言的话,就是下面这张表(ptr是char *类型):BFC>++ptr;<--ptr;+++*ptr;---*ptr;.putchar(*ptr);,*ptr =getchar();[while (*ptr) {]}好了,说到这里,估计大家都知道这个题目是干什么的了:给出一个Brainfuck程序以及一串输入,请输出对于这串输入的输出结果.



输入格式

输入包含两部分,第一部分是Brainfuck源程序(在100000个字符内)包括多行(源程序分析过程中忽略空白字符例如:空格' '、制表符'\t'、换行回车'\n'),以#号表示源程序结束,保证程序没有语法错误。#号的下一行整行是输入(在100000个字符以内),如果输入为空,则这行是“NULL”,不包含引号。


输出格式

输出这个程序对于对应输入的输出。


输入样例

++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.#NULL


输出样例

Hello World!


提示

ps:这里给一段小小的Brainfuck程序出来,其实和测试数据没什么关系,大家能跟我做个约定吗?大家过了这题之后才许运行这段小程序哦~windows用户请运行这个:++++++++++++++++[>+++>++++++++++>+++++++++++>++++++++++++>+++++++++++++>++++++++++++++>+++++++++++++++>++++++++++++++++<<<<<<<<-]>>>>++.>>>-.<<<<<+.>-----.>>+++.---.<+.--------.>+++.---.+++++++.>>++.<<-------------.>--------.----.<<+.------.<---.>-.++++++++.>>+++.>---.<<<---.>>>+++++.<<------.>+.<<<<++.>>+++++.>++++.>>------------.<<<------.>>>>-----.<<<++.---.<----.>---.<++++++.<++++++++.<.>----.>>++++++.<<<+++.>>------.>>++++.<<<<<-.>>>>.<<<.>>>-------..+.>>----.<----------.<<++++++.-----.<<++.>>>++++++.---.<++.>>>>-----.<<<<++.>----.<.<<------.>>>>+++++.----.<<<<-.>-.>>+++++.>>++++.<<<-.>>>>+++++.<<<<-------.+++++++++.>++.---.---.+++.>-.<<<+++++++.>>----.<.>>----.----.++.>-----.<<<<<++.>------.++++++++.>>>>>--------.<<+++++.<<<<++++.>>>>------.<+..>>++++++++.<<<<<----.+++++++++.>>>>++++++++.---.<<-.>>++++++++++++.<<<++.>>>++++.<<<---.>>++++++++++++.-----------.<<++.<---------.+++++++++.>>>++.>>+.<<<++.>>+.<<<--.>>>-----------.<<<++.>+.>>+.>+++.<<<---.>>>>.<<<<<<-----------.++++++++++.#linux/unix用户请运行这个:++++++++++++++++[>+++>++++++++>+++++++++>++++++++++>+++++++++++>++++++++++++>++++++++++++++>+++++++++++++++<<<<<<<<-]>>>>>>>+++++.<<<--------.+++.>>>>-.<<---.<<+++.>>>+.<<<--.<-------.>>>>.<<++.<+++++.>>>.<<<-----.<.>>>>+++.<<<<<+.>>>+++.>>----.<<-------.<<-.>>>>++.<---.<--------.>>--.<<++++++++.<--.>>>.<<<<.>>++.>>+.<<<++.<<-.>>>>>-.<<<<++++++++.--.>>>>.<<<<+++.>++++++.>>>>.<<++.<<---.>>>.<<<+++++++.<<++.>>>>>+.<<<--------.--.>>>.<<<----.>-.>>+.<<<++.<<++.>>>>>+.<<.<+++.>>>>.<<.<<<-----.>>>>---.<----.<<<----.>>>>.<++++.<<++.<<<-.>>>>>>.<----.<<<.>>>>.<<<+++++++.>>+.>-.<++++.<<------.>>>.<-----.<<<<----.>>>>>+.<<-.<------.>>>+.<<<--.>+.>>--.<.<-----.>>+.<<-----.>+++++.>.<<++++++++.----.>>.<<++++.<--------.>>>>.<<.<<++++++++++++++.>>>.<<-------.<<<++.>>>>>+.<<<.--.>>>--.<-----.<<<+++++.>>>>++.<<<----.>+++++++++.>>+++.<<<<<.>>+++++++++++.>>>-----.<+.<<----.>>>++.<<+++.<++.>>>+++.<<<----------.>----.>>.<<<+++++++++++.----------.>>>>.<<+++.<<<-.>>>>----.<<----------.+++.>>.<<++++++.-------.>>.<<<+++..>>>.<---.-----.>>.<<++++++++.<<<.>>>>+.<<<+.<---.>>>>-.<++.<<<-.>>>>.<<--.<--.>>>+.<<<<+.>>>+.>++.<<+++++++++++.>-----.>>.<<++.<<<+++.>>>>.<<.>-----.>---.<<<+++.---.>>>+.<<<<.<-.>>>>>-.<<<<----.>>+.>>+.<<<++.<<-.>>>>>-.<<<<++++++++.--.>>>>>.<<++++++.<<++.#


作者

 lyric_seraph 附上我通过下图样例照样超时的代码

#include <cstdio>#include <cstring>#include <queue>#include <stack>#include <iostream>#include <bitset>#include <algorithm>using namespace std;const int sm=1000005;char Brainfuck[sm];char input[sm];char output[sm];int pre_mark[sm],last_mark[sm],p=0,l=0;int main() {    int mark=0,mark2=0;    char c;    while((c=getchar())!='#'){        if(c==' '||c=='\t'||c=='\n');        else {            if(mark>=1&&c=='-'&&Brainfuck[mark-1]=='+'||mark>=1&&c=='+'&&Brainfuck[mark-1]=='-')                --mark;            else if(mark>=1&&c=='<'&&Brainfuck[mark-1]=='>'||mark>=1&&c=='>'&&Brainfuck[mark-1]=='<')                --mark;            else{                if(c=='[')pre_mark[p++]=mark;                else if(c==']')last_mark[l++]=mark;                Brainfuck[mark++]=c;                }            }    }    getchar();    gets(input);    char *ptr=output;    stack<int> loc;    for(int i=0;i<mark;++i)    {        switch(Brainfuck[i]){            case '>':++ptr;break;            case '<':--ptr;break;            case '+':++*ptr;break;            case '-':--*ptr;break;            case '.':putchar(*ptr);break;            case ',':*ptr=input[mark2++];break;            case '[':if(!*ptr){int c=0;while(Brainfuck[i]!=']'&&i<mark||c&&i<mark){if(Brainfuck[i]=='[')++c;++i;if(Brainfuck[i]==']')--c;}}                     else loc.push(i);                     break;            case ']':if(*ptr)i=loc.top();else loc.pop();break;        }    }    return 0;}

询问某位大佬时,他说:“实在不会那就不做了。”的确,与其消耗在此,不如趁机多学习自己能力范围内的知识,迟早有一天,就能做出来了。



0 0
原创粉丝点击