这两个题,讲的是有一种奇怪的语言,代码是一种二维的矩阵。

前一个题,是根据所给的要求,写一个简单的解释器。

后一个题,是用那种语言写一个简单的小程序。

挺有意思的,所以在这里纪念一下。顺便那个语言的原型是一种叫做Befunge的语言。真实存在的哟。

代码:

  简单的解释器:  

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <string>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
#include <functional>
#include <cctype>
#include <time.h> using namespace std; const int INF = <<;
const int MAXN = ;
const int MAXM = 1e5+;
const int MAXSTEP = 1e6;
const int MAX_NUM = 1e5;
const int dir[][] = { {, }, {, }, {, -}, {-, } }; int H, W;
char G[MAXN][MAXN];
int num[MAXM], n, curNum;
int pointer[], d;
int stepCnt; int cur, memory[]; bool check() {
if (!(-MAX_NUM<=cur&&cur<=MAX_NUM)) {
//溢出错误
puts("OVERFLOW ERROR");
return false;
}
stepCnt++;
if (stepCnt>=MAXSTEP) {
//超时
puts("TIME LIMIT EXCEEDED");
return false;
}
pointer[] += dir[d][]; pointer[] += dir[d][];
if (!(<=pointer[]&&pointer[]<H && <=pointer[]&&pointer[]<W)) {
//指针越界
puts("RUNTIME ERROR");
return false;
}
if (curNum>=n) curNum = n-;
return true;
} void init() {
//初始化寄存器
cur = ;
memset(memory, , sizeof(memory));
//初始化指针
pointer[] = pointer[] = ;
d = ;
//初始化计数器
stepCnt = ;
curNum = ;
} void run() {
init();
while (true) {
char c = G[pointer[]][pointer[]];
if ('#'==c)
break;
else if ('^'==c)
d = ;
else if ('v'==c)
d = ;
else if ('<'==c)
d = ;
else if ('>'==c)
d = ;
else if ('@'==c)
if (cur!=) d = (d+)%;
else d = (d+)%;
else if ('A'<=c&&c<='Z')
swap(cur, memory[c-'A']);
else if ('?'==c) {
cur = num[curNum++];
} else if ('!'==c) {
printf("%d\n", cur);
cur = ;
} else if ('+'==c)
cur++;
else if ('-'==c)
cur--;
else if ('.'==c)
;
if (!check()) break;
}
} int main() {
#ifdef Phantom01
freopen("URAL2027.txt", "r", stdin);
#endif //Phantom01 while (scanf("%d%d", &H, &W)!=EOF) {
for (int i = ; i < H; i++)
scanf("%s", G[i]);
scanf("%d", &n);
for (int i = ; i < n; i++)
scanf("%d", &num[i]);
run();
} return ;
}

解释器

  小程序:

 9 12
?..........v
>.>v>>Tv>>v.
.>.>@..>@^I.
.-..I..^A.-.
.^..+..^+.v<
.T..I..-A...
.^+T<..^<...
^.........@v
........#!A<

小程序

URAL 2027 2028 两个有趣的题的更多相关文章

  1. Ural 1209. 1, 10, 100, 1000... 一道有趣的题

    1209. 1, 10, 100, 1000... Time limit: 1.0 secondMemory limit: 64 MB Let's consider an infinite seque ...

  2. URAL - 1917 Titan Ruins: Deadly Accuracy(水题)

    水题一个,代码挫了一下: 题意不好理解. 你去一个洞窟内探险,洞窟内有许多宝石,但都有魔法守护,你需要用魔法将它们打下来. 每个宝石都有自己的防御等级,当你的魔法超过它的防御等级时它就会被你打下来. ...

  3. 两道相似KMP题

    1.POJ 3450 Coporate Identity 这两题的解法都是枚举子串,然后匹配,像这种题目以后可以不用KMP来做,直接字符串自带的strstr函数搞定,如果字符串未出现,该函数返回NUL ...

  4. URAL 1008 - Image Encoding(bfs坑爹题)

    坑爹题,两种输入输出互相交换,裸bfs #include <stdio.h> #include <string.h> typedef struct { int x; int y ...

  5. 又一道简单题&&Ladygod(两道思维水题)

    Ladygod Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit S ...

  6. 一道cf水题再加两道紫薯题的感悟

    . 遇到一个很大的数除以另一个数时,可以尝试把这个很大的数进行,素数因子分解. . 遇到多个数的乘积与另一个数的除法时,求是否能整除,可以先求每一个数与分母的最大公约数,最后若分母数字为1,则证明可整 ...

  7. bzoj1814 Ural 1519 Formula 1(插头dp模板题)

    1814: Ural 1519 Formula 1 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 924  Solved: 351[Submit][Sta ...

  8. FJOI2020 的两道组合计数题

    最近细品了 FJOI2020 的两道计数题,感觉抛开数据范围不清还卡常不谈里面的组合计数技巧还是挺不错的.由于这两道题都基于卡特兰数的拓展,所以我们把它们一并研究掉. 首先是 D1T3 ,先给出简要题 ...

  9. 发现两个有趣的CSS3效果

    一.CSS3画机器猫 http://keleyi.com/keleyi/phtml/html5/3.htm 哆啦A梦效果图: 可用于浏览器对CSS3支持情况的测试 但最近有人对这个测试表示怀疑,指该测 ...

随机推荐

  1. Coding for Speed 技术分享

    上周和公司技术同事们作了次<Coding for Speed>技术分享,本来这只是再普通不过的技术探讨和交流(虽然挂了个颇有噱头的名称),但分享的时候逻辑没理好,语速很快,时间也太紧,因此 ...

  2. java实验程序基础中的问题总结 java图形化界面

    一,课程中的问题 1,知道程序实现的大体框架,但是不能具体到每一个细节,这需要平时的积累. 2,在不同文件夹中定义的类之间有没有联系,类与类之间可以通过接口相互联系. 3,如何在一个对话框中显示文本, ...

  3. 父类指针指向子类内存,为什么当父类的成员函数不加virtual时,访问的还是父类的成员函数,而不是子类同名的成员函数

    我认为是这样,类的成员函数都在代码区,不同的类的成员函数在代码区有自己的类名称空间限制,类的虚函数在虚函数表中,程序执行的时候,是先在虚函数表中找该成员函数,如果没有找到,就去该类在代码区的成员函数中 ...

  4. UML基础知识点

    UML   :   unified Modeling Language  统一建模语言 1.对系统问题进行分析和建模 2.非专利的第三代建模和规约语言 3.UML是一种开放的方法.用于说明.可视化.构 ...

  5. iOS Autolayout情况下,ViewController嵌套时,childViewController的Frame异常问题

    近期项目中,使用Storyboard.AutoLayout开发,某个ViewController中嵌套了多个子ViewController,结果在将其加入到父ViewController时,出现坐标异 ...

  6. C中操作文件的几种模式

    使用文件的方式共同拥有12种,以下给出了它们的符号和意义.  文件打开方式  意义 rt  仅仅读打开一个文本文件.仅仅同意读数据  wt  仅仅写打开或建立一个文本文件,仅仅同意写数据  at  追 ...

  7. java.lang.ClassNotFoundException: org.jaxen.JaxenException

    java.lang.ClassNotFoundException: org.jaxen.JaxenException java.lang.ClassNotFoundException: org.jax ...

  8. 初始化的数值(int、double等)(一)

    首先考虑一个具有几个构造函数的MyClass类.如果我们决定在这个类的私有部分加入一个新的数据成员,称为int_data_: class MyClass { public: MyClass() : i ...

  9. JS冒泡事件 与 事件捕获

    JS冒泡事件 与 事件捕获 案例 <!DOCTYPE html> <html> <head> <title>冒泡事件</title> < ...

  10. Oracle RAC 实施

    第 1 步 — 确定项目范围 理由 我们实施 Oracle RAC 是为了使我们的应用程序可伸缩和高度可用,以及为我们的客户提供更可靠的服务. 目标/可交付产品 该项目的最终产品将是一个新的 Orac ...