HDUST-1245 Interpreter(模拟)
1245: Problem E: Interpreter
时间限制: 1 Sec 内存限制: 128 MB
提交: 4 解决: 2
[提交][状态][讨论版]
题目描述
Problem E: Interpreter
A certain computer has 10 registers and 1000 words of RAM. Each register or RAM location holds a 3-digit integer between 0 and 999. Instructions are encoded as 3-digit integers and stored in RAM. The encodings are as follows:
- 100 means halt
- 2dn means set register d to n (between 0 and 9)
- 3dn means add n to register d
- 4dn means multiply register d by n
- 5ds means set register d to the value of register s
- 6ds means add the value of register s to register d
- 7ds means multiply register d by the value of register s
- 8da means set register d to the value in RAM whose address is in register a
- 9sa means set the value in RAM whose address is in register a to the value of register s
- 0ds means goto the location in register d unless register s contains 0
All registers initially contain 000. The initial content of the RAM is read from standard input. The first instruction to be executed is at RAM address 0. All results are reduced modulo 1000.
The input to your program consists of up to 1000 3-digit unsigned integers, representing the contents of consecutive RAM locations starting at 0. Unspecified RAM locations are initialized to 000.
The output from your program is a single integer: the number of instructions executed up to and including the halt instruction. You may assume that the program does halt.
输入
输出
样例输入
299
492
495
399
492
495
399
283
279
689
078
100
000
000
000
样例输出
16
#include<bits/stdc++.h> using namespace std;
const int N = + ;
const int M = + ;
#define mod %1000 int a[N], reg[M]; int Solve(int n){
auto cnt = ;
for(int i = ; ; i++){
++ cnt;
int t = a[i] / , x = (a[i] % ) / , y = a[i] % ;
a[i] = a[i] mod;
if(!t && reg[y]) i = reg[x] - ;
else if(t == ) return cnt;
else if(t == ) reg[x] = y;
else if(t == ) reg[x] = (reg[x] + y) mod;
else if(t == ) reg[x] = (reg[x] * y) mod;
else if(t == ) reg[x] = reg[y];
else if(t == ) reg[x] = (reg[x] + reg[y]) mod;
else if(t == ) reg[x] = (reg[x] * reg[y]) mod;
else if(t == ) reg[x] = a[reg[y]] mod;
else if(t == ) a[reg[y]] = reg[x] mod;
}
return -;
}
int main(){
char ch[];
int n = ;
while(fgets(ch, , stdin) != NULL){
sscanf(ch, "%d", &a[n ++]);
}
printf("%d\n", Solve( n ));
return ;
}
HDUST-1245 Interpreter(模拟)的更多相关文章
- PL/0编译器(java version) - Interpreter.java
1: package compiler; 2: 3: import java.io.BufferedReader; 4: import java.io.BufferedWriter; 5: imp ...
- POJ 模拟题集合
http://www.cppblog.com/Uriel/articles/101592.html 感觉这个暑假没有去年有激情啊,,,还没到状态就已经块上学了,,, 真是弱暴了,,,找几道模拟题刷刷. ...
- python之GIL官方文档 global interpreter lock 全局解释器锁
0.目录 2. 术语 global interpreter lock 全局解释器锁3. C-API 还有更多没有仔细看4. 定期切换线程5. wiki.python6. python.doc FAQ ...
- python模拟面试技术题答案
目录 Python4期模拟面试技术面试题答案............................................................................ ...
- Java 模拟面试题
1.面向对象的特点 继承,封装,多态 2.对象和类的区别是什么? 对象是对客观事物的抽象,类是对对象的抽象.类是一种抽象的数据类型,它们的关系是,对象是类的实例,类是对象的模板. 3.静态成员和实例成 ...
- javascript设计模式 - 解释器模式(interpreter)
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Python Interpreter
在开始之前,我们先限定下python解释器的意思.当讨论Python的时候,解释器这个词可以用在不同的地方.有的时候,解释器指的是Python Interpreter,也就是你在命令行交互界面上输入p ...
- 解释器模式Interpreter详解
原文链接:https://www.cnblogs.com/java-my-life/archive/2012/06/19/2552617.html 在阎宏博士的<JAVA与模式>一书中开头 ...
- 如何实现模拟器(CHIP-8 interpreter) 绝佳杰作.
转自 http://www.multigesture.net/articles/how-to-write-an-emulator-chip-8-interpreter/ How to write an ...
随机推荐
- JavaScript插件制作-tab选项卡
JavaScript插件制作练习-鼠标划过选项卡切换图片 <!DOCTYPE html> <html> <head> <meta charset=" ...
- BOM—Browser Object Model and DOM—Document Object Model
浏览器对象模型的内涵是每个页面都是一个window对象,而dom是document为基准的模型,而document与wimdow.document指向相同,所以可以这么理解,bom模型的定义是包括do ...
- hdu 4763 看毛片(单纯next数组的应用--纯正O(n))
因为需要负责队内的字符串题,开始刷,做到这道,开始想不出来,上网找题解, 然后就惊了,为什么你们这么暴力都可以过的啊,1e6啊,后来又想了下会做了 贴下代码 #include <iostream ...
- C++ 操作符重载实践 & java没有重载操作符的思路
实践如下: #include <iostream> using namespace std; class Book{ private: int page; public: Book(int ...
- 【转】C++友元
转自:https://www.cnblogs.com/BeyondAnyTime/archive/2012/06/04/2535305.html 1.友元函数的简单介绍 1.1为什么要使用友元函数 在 ...
- DPI的理解
DPI(Dots Per Inch,每英寸点数)是一个量度单位,用于点阵数码影像,指每一英寸长度中,取样.可显示或输出点的数目. DPI是打印机.鼠标等设备分辨率的度量单位.是衡量打印机打印精度的主要 ...
- awk 数值和字符串比较问题
在linux终端输入如下命令: > echo "10025350462330387914 10025350462330388480" | awk '{if ($1 == $2 ...
- poi生成excel整理(设置边框/字体/颜色/加粗/居中/)
转: poi生成excel整理(设置边框/字体/颜色/加粗/居中/) 2016年12月02日 11:05:23 吃奶的牛 阅读数:34324 HSSFWorkbook wb = new HSSFW ...
- redis源码分析之数据结构--dictionary
本文不讲hash算法,而主要是分析redis中的dict数据结构的特性--分步rehash. 首先看下数据结构:dict代表数据字典,每个数据字典有两个哈希表dictht,哈希表采用链式存储. typ ...
- oracle 12 安装
oracle 12 第二版本安装 下载地址 https://www.oracle.com/technetwork/cn/middleware/webcenter/content/downloads/ ...