(2015年郑州轻工业学院ACM校赛题) E 汇编原理

此题属于比较麻烦的模拟题,比赛的时候是队友写的, 比赛结束之后自己也写了一遍,感觉对复杂模拟的掌控还是不行!

解析:

我感觉 ADD操作 和 MOV操作比较类似 所以就写在了一块,MUL操作单独写就行了。

#include<stdio.h>
#include<string.h>
#define maxn 100

long long cpu[4][3];

int Binary(char str[])
{
    int i, sum = 0;
    for(i=0; str[i]; i++)
        sum = sum*2 + str[i]-‘0‘;

    return sum;
}

int GetR()
{
    int i, len, R;
    char str[maxn];

    scanf("%s", str);

    len = strlen(str)-1;

    if(str[1] >= ‘A‘ && str[1] <= ‘D‘)
    {
        if(str[2] == ‘H‘)
            R = cpu[str[1]-‘A‘][1];
        else if(str[2] == ‘L‘)
            R = cpu[str[1]-‘A‘][2];
        else if(str[2] == ‘X‘)
            R = cpu[str[1]-‘A‘][0];
    }

    else if(str[len] == ‘H‘)
    {
        str[len] = 0;
        sscanf(str+1,"%X", &R);
    }

    else if(str[len] == ‘B‘)
    {
        str[len] = 0;
        R = Binary(str+1);
    }
    else
    {
        sscanf(str+1,"%d", &R);
    }

    return R;
}

void MOV_ADD(int m,int n,int flag)
{
    int R;

    R = GetR();

    if(flag == 0)
    {
        cpu[m][n] = R;
    }
    else
    {
        cpu[m][n] += R;
    }

    if(n == 0)
    {
        cpu[m][1] = cpu[m][0]/256;
        cpu[m][2] = cpu[m][0]%256;
    }
    else
        cpu[m][0] = cpu[m][1]*256 + cpu[m][2];
}

void MUL(int m,int n)
{

    if(n == 2 || n == 1)
    {
        cpu[0][0] = cpu[m][n]*cpu[0][2];
    }
    else
    {
        cpu[3][0] = (cpu[m][n]*cpu[0][0])/65536;
        cpu[0][0] = (cpu[m][n]*cpu[0][0])%65536;

        cpu[3][1] = cpu[3][0]/256;
        cpu[3][2] = cpu[3][0]%256;
    }
    cpu[0][1] = cpu[0][0]/256;
    cpu[0][2] = cpu[0][0]%256;
}

int main()
{
    int T, t, k, x;
    char str[maxn], str2[maxn];
    scanf("%d",&T);

    while(T--)
    {

        scanf("%d",&t);
        memset(cpu, 0, sizeof(cpu));
        while(t--)
        {
            scanf("%s%2s", str,str2);

            k = str2[0] - ‘A‘;

            if(str2[1] == ‘X‘)
                x = 0;
            else if(str2[1] == ‘H‘)
                x = 1;
            else if(str2[1] == ‘L‘)
                x = 2;

            if(strcmp(str,"MOV") == 0)
            {
                MOV_ADD(k,x,0);
            }
            else if(strcmp(str,"ADD") == 0)
            {
                MOV_ADD(k,x,1);
            }
            else
                MUL(k,x);
        }
        printf("%lld %lld %lld %lld\n",cpu[0][0], cpu[1][0], cpu[2][0], cpu[3][0]);
    }
    return 0;
}
时间: 2024-11-05 19:37:59

(2015年郑州轻工业学院ACM校赛题) E 汇编原理的相关文章

20170416郑州市轻工业学院ACM校赛

这是个星期天,但是,这种非一线城市,重点城市什么的高中,放假从来不按套路出牌,几乎可以说能给你一天是福气.当然,比县里好的多,问在县里上高中的初中同学,放假更是比我们一天里的午休+晚上吃饭时间还要少.不禁想问这样的压力难道就真的有效么 所以昨天请了假.早上出来,带着一丝丝的激动,但又很平静[或许这并不矛盾].五个三人队伍,八点20才到了目的地:比赛是九点,结果上了楼一直等到九点五十[回来的时候知道电力除了问题].看窗外淅淅沥沥下着雨,走廊里站满了人在闲聊,我们一群人也在瞎互%.入了场发现每人面前

2015广东工业大学ACM校赛 I 游戏王 (状压dp)

Problem I: 游戏王 Description 小学的时候,Stubird非常喜欢玩游戏王,有一天,他发现了一个绝佳的连锁组合,这个连锁组合需要6张卡, 可是他一张都没有,但是他的那些朋友们有,不过当然,他们不会白给,不过也不排除有人和他交情好,送给他了. 不过他们有成全别人的美德,当他们看到Stubird已经有某些他们喜欢的卡的时候,他们会给他优惠,或者更贵也说不定 嘛不过,你可以把有的卡片藏起来,不告诉他们,来获得更低的价格. 问他最少需要多少钱才可以集齐所有的卡. Input 第一行

第九届西电ACM校赛解答

Description 欢迎参加西电第九届ACM校内赛!作为一名经历了四届校赛的ACM老队员以及本次校赛的出题人,每次校赛都让我有一种全新的感受--有第一次参加校赛时提交代码时紧张到双手发抖,也有当裁判时看到有些不明真相的人提交编译后程序时的欢乐.不管你是第几次参赛,好好享受这一刻带给你的各种感受,经历就是一种财富.为了让大家更好地记住这悲喜交加的日子,特意准备了这么一道题: 给你一个日期,你只要输出这个日期是在校赛前还是校赛后,或者刚好就是校赛那一天(2011年5月22号). 题目是什么意思呢

2016 年宁波工程学院第七届ACM校赛题解报告

2016 年宁波工程学院第七届ACM校赛题解报告 本题解代码直接为比赛代码,仅供参考. A,B,C,D,G,H,J,K,L,M 来自 Ticsmtc 同学. F 来自 Gealo 同学. E,I 来自Alex 学长. Promblem A :    Two Sum 时间限制: 1 Sec  内存限制: 64 MB 题目描述: 给出n个数,另外给出?个整数S,判断是否可以从中取出2个数,使得这两个数的和是S. 输入: 第?行有个整数T(1 <= T <= 10),代表数据组数. 对于每组数据,第

第5届ACM校赛—矩阵

矩阵 题目描述 给定一个n x m 的矩阵,每次操作,你可以对矩阵的某一个元素加上或减去一个整数值d,求最小的操作次数,使得矩阵的所有元素都相同,如果不能实现,输出-1. 输入 输入包含多组测试数据,对于每组测试数据: 第一行为三个整数  , m≤500,1≤d≤10000). 接下来 m 个整数,第 行第 个整数为ij(1  ij≤10). 当n=m=d=0 时代表输入结束. 输出 对于每组测试数据,输出一个整数,为最小操作次数,如果不能实现,输出-1. 64-bit,用long long 定

2014哈商大ICPC/ACM校赛解题报告

被debug邀请去參加校赛,哎,被虐..我对不起工大.. 由于本人不搞ACM,算法处于HelloWorld水准.. 虽然题目除了鸟不拉屎星人之外都非常水,但我能做到这个程度,全然是超水平发挥了.. 数据:点此下载 ============================================================== a:逆序数组+删除特定元素 题目: 小伙伴们好像非常多没接触过ICPC,那先来一道水题尝尝鲜,给出 一个数组,和一个特征值.将这个数组中特征值值删除后逆序输出.

第八届郑州轻工业学院ACM(程序设计大赛)校内预选赛

郑州轻工业学院有一个大赛,把几个有趣的题目分享一下.下面是题目连接,喜欢了就点点... 斗破苍穹 礼上往来 统计人数 神の数 炉石传说 Mathematics and Geometry 马拉松后记 斗破苍穹 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 205  Solved: 46SubmitStatusWeb Board Description 有一天, 我们帅气的LC来到加玛帝国. 有时候, 缘分就是这么奇怪, LC和加玛帝国的公主一见钟情

2018 FJUT acm校赛 b题 第二集:以后我就叫你小蛤了

第二集:以后我就叫你小蛤了 TimeLimit:1000MS  MemoryLimit:128MB 64-bit integer IO format:%lld Problem Description "小蛤啊,对了以后我就叫你小蛤了,你给的题完全没有难度啊" "哼,你别得意,让你碰巧做出来了而已,接下来这题你绝对不可能做出来的,你要是做出来了balabalabala...." "行了行了,快说题目吧,我时间宝贵啊!" 小A心急如焚,想尽快知道小C

2018 FJUT ACM 校赛 j题 外传:魔王打工记(一)

外传:魔王打工记(一) TimeLimit:1000MS  MemoryLimit:128MB 64-bit integer IO format:%lld Problem Description 话说Home_W大魔王手下有四大天王: 首席战神--赛文斯,SoftWork首席科学家--布莱克,首席军师--金金金,首席狙击手--超无聊,首席苦力--小明. 然而,这些部下个个都是饭桶,把Home_W都快吃穷.虽然Home_W嘴上说:打工是不可能打工的,这辈子不可能打工的.烧杀抢又不会做,就只有当正义