【HDOJ】1341 Simple Computers
2014-11-25 22:25
141 查看
注意PC要与31.
#include <cstdio> #include <cstring> #include <cstdlib> #define MAXN 40 #define MAXL 10 char mem[MAXN][MAXL]; char ans[MAXL]; int getv(char s[], int i, int j) { int ret = 0; while (i < j) { ret = (ret<<1) + s[i] - '0'; ++i; } return ret; } void store(char s[], unsigned char acc) { int i = 0; int v = (int)acc; int mask = 0x80; for (i=0; i<8; ++i) { if (v & mask) { s[i] = '1'; } else { s[i] = '0'; } mask >>= 1; } s[i] = '\0'; } void solve() { int op, addr; int tmp; bool nhalt = true; unsigned char acc = 0; int pc = 0; while (nhalt) { pc &= 0x1f; op = getv(mem[pc], 0, 3); addr = getv(mem[pc], 3, 8); ++pc; switch (op) { case 0: store(mem[addr], acc); break; case 1: tmp = getv(mem[addr], 0, 8); acc = (unsigned char) tmp; break; case 2: if (acc == 0) pc = addr; break; case 3: break; case 4: --acc; break; case 5: ++acc; break; case 6: pc = addr; break; case 7: nhalt = false; break; default: break; } } store(ans, acc); } int main() { int i; #ifndef ONLINE_JUDGE freopen("data.in", "r", stdin); #endif while (1) { i = 0; if (scanf("%s", mem[i++]) == EOF) break; while (i < 32) scanf("%s", mem[i++]); solve(); printf("%s\n", ans); } return 0; }
相关文章推荐
- HDOJ_pid=1341_Simple Computers_type=simulation
- HDU/HDOJ 1084 What Is Your Grade?
- NYOJ 998&& HDOJ2588 GCD (欧拉函数)
- HDOJ 2609How many
- hdoj-2055-An easy problem
- HDOJ 2317 Nasty Hacks(水题)
- HDOJ 2019 数列有序!(排序)
- hdoj1018_Big Number(大数阶乘位数)
- HDOJ 5442 Favorite Donut
- HDOJ/HDU 1088 Write a simple HTML Browser(HTML字符串)
- HDOJ 2521 反素数
- HDOJ 3652 B-B-number
- HDOJ 1008
- 【NTT】 HDOJ 5279 YJC plays Minecraft
- ACM--DFS--最大碉堡数--HDOJ 1045--Fire Net
- hdoj1232 畅通工程(并查集)
- HDOJ-2152 Fruit (母函数)
- HDOJ 4666 Hyperspace 最大曼哈顿距离
- HDOJ5044(最近公共祖先)
- HDOJ-1255 覆盖的面积(扫描线)