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

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

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

挺有意思的,所以在这里纪念一下。顺便那个语言的原型是一种叫做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. 如何设置,获取,删除cookie?

    cookie : 存储数据,当用户访问了某个网站(网页)的时候,我们就可以通过cookie来像访问者电脑上存储数据 1.不同的浏览器存放的cookie位置不一样,也是不能通用的 2.cookie的存储 ...

  2. tensorflow之tf.slice()

    转载:https://www.jianshu.com/p/71e6ef6c121b https://www.cnblogs.com/chamie/p/11073363.html def slice(i ...

  3. unity 获取UGUI中的Text字的坐标

    using System.Collections; using UnityEngine; using UnityEngine.UI; public class TextMoveHelper : Mon ...

  4. java字符文件的读写

    1.java文件读写,首先我们需要导入相应的包:java.io.*; 2.代码如下: package Demo1; import java.io.*; public class FileWirteTe ...

  5. HDU 4165

    一块药看成括号配对就行了.很明显的直接求卡特兰数. 今晚看了HDU 3240的题,有一点思路,但无情的TLE.想不到什么好方法了,看了别人的解答,哇...简直是天才的做法啊....留到星期六自己思考一 ...

  6. POJ 2773

    不经意看见dis后的“mod”一词后,瞬间有了思路,点进去看,却发现别人想的和我的不一样——! 我是这样想的,利用的是剩余系+欧几里德带余除法的性质. 若两者GCD=1,则必有除数和余数GCD=1.于 ...

  7. JDK+JDBC+MySQL实例及注意事项

    by qx.zhong Hangzhou 29 Jun 2014 开发环境 OS:  Win8.1 x64 JDK: 1.8 SE DB:  MySQL 5.5  Lib:  mysql-connec ...

  8. 使用iTools、PP助手清理垃圾前后文件夹对照图

    1.1 documents清理前 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHl4am4=/font/5a6L5L2T/fontsize/400/fi ...

  9. MySQL优化之——集群搭建步骤具体解释

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46833179 1 概述 MySQL Cluster 是MySQL 适合于分布式计算 ...

  10. xBIM 基础14 使用LINQ实现最佳性能(优化查询)

    系列目录    [已更新最新开发文章,点击查看详细]  LINQ代表语言集成查询,它是3.5版以来的.NET Framework的一部分.它实现延迟执行,这意味着您可以链接查询语句,并且在您实际迭代结 ...