URAL 2027 2028 两个有趣的题
这两个题,讲的是有一种奇怪的语言,代码是一种二维的矩阵。
前一个题,是根据所给的要求,写一个简单的解释器。
后一个题,是用那种语言写一个简单的小程序。
挺有意思的,所以在这里纪念一下。顺便那个语言的原型是一种叫做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 两个有趣的题的更多相关文章
- 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 ...
- URAL - 1917 Titan Ruins: Deadly Accuracy(水题)
水题一个,代码挫了一下: 题意不好理解. 你去一个洞窟内探险,洞窟内有许多宝石,但都有魔法守护,你需要用魔法将它们打下来. 每个宝石都有自己的防御等级,当你的魔法超过它的防御等级时它就会被你打下来. ...
- 两道相似KMP题
1.POJ 3450 Coporate Identity 这两题的解法都是枚举子串,然后匹配,像这种题目以后可以不用KMP来做,直接字符串自带的strstr函数搞定,如果字符串未出现,该函数返回NUL ...
- URAL 1008 - Image Encoding(bfs坑爹题)
坑爹题,两种输入输出互相交换,裸bfs #include <stdio.h> #include <string.h> typedef struct { int x; int y ...
- 又一道简单题&&Ladygod(两道思维水题)
Ladygod Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit S ...
- 一道cf水题再加两道紫薯题的感悟
. 遇到一个很大的数除以另一个数时,可以尝试把这个很大的数进行,素数因子分解. . 遇到多个数的乘积与另一个数的除法时,求是否能整除,可以先求每一个数与分母的最大公约数,最后若分母数字为1,则证明可整 ...
- bzoj1814 Ural 1519 Formula 1(插头dp模板题)
1814: Ural 1519 Formula 1 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 924 Solved: 351[Submit][Sta ...
- FJOI2020 的两道组合计数题
最近细品了 FJOI2020 的两道计数题,感觉抛开数据范围不清还卡常不谈里面的组合计数技巧还是挺不错的.由于这两道题都基于卡特兰数的拓展,所以我们把它们一并研究掉. 首先是 D1T3 ,先给出简要题 ...
- 发现两个有趣的CSS3效果
一.CSS3画机器猫 http://keleyi.com/keleyi/phtml/html5/3.htm 哆啦A梦效果图: 可用于浏览器对CSS3支持情况的测试 但最近有人对这个测试表示怀疑,指该测 ...
随机推荐
- 在centos系统中增、删交换分区
Swap介绍: Linux 将物理内存分为内存段,叫做页面.交换是指内存页面被复制到预先设定好的硬盘空间(叫做交换空间)的过程,目的是释放对于页面的内存.物理内存和交换空间的总大小是可用的虚拟内存的总 ...
- python--(常用模块-3-正则表达式)
python--(常用模块-3-正则表达式) 正则表达式是对字符串操作的⼀种逻辑公式. 我们⼀般使⽤正则表达式对字符串进⾏匹 配和过滤. 使⽤正则的优缺点: 优点: 灵活, 功能性强, 逻辑性强. 缺 ...
- 多个 WindowsFormsHost 叠加顺序调整
原文:多个 WindowsFormsHost 叠加顺序调整 工作中遇到多个 WindowsFormsHost 包装的控件叠加顺序的调整问题,用了 BingToFront 和 BringToBack,不 ...
- windows服务器剪贴板不能共用的解决办法
远程桌面无法使用剪贴板共享纯文本的解决方法========================================以下操作须在远程桌面上操作,本地机没用的!================== ...
- HDU 2155 Matrix
Matrix Time Limit: 3000ms Memory Limit: 65536KB This problem will be judged on PKU. Original ID: 215 ...
- dubbo知识点理解
1.分布式服务架构关键在于:用于提高业务复用及整合的 分布式服务框架(RPC) 是关键.注册中心是关键,提供业务复用和整合. 2.dubbo在消费方,获取服务列表后提供软负载均衡.dubbo在消费方提 ...
- Cocos2d-x 3.4 之 消灭星星 > 第三篇(终) <
***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...
- c++:数据类型的推断type_traits
//推断左值右值引用 void main() { int i(10);//i是左值 有内存实体 int &ri(i); int &&rri(i + 5);//右值引用 cout ...
- bzoj3444: 最后的晚餐(并查集+组合数学)
3444: 最后的晚餐 题目:传送门 题解: 考虑有解的情况: 直接上并查集,同一个联通块里的人一定要坐在一起的.不难发现其实对于每个联通块最多就只有两种排列方式,那就直接把大于等于两个人的联通块先去 ...
- iOS七种手势
// 初始化一个UIimageView UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, ...