1. 问题

  1. 不知道怎么存储操作
  2. 看代码注释,else if等

2. 代码

#include <iostream>
#include <stdio.h>
#include <string.h>
#define LOCAL
#define MAXN 10000

using namespace std;

int r=0,c=0,n=0,num=0;

// 存储操作,将所有操作集成到一个struct中
struct Command
{
    char c[5];
    int r1,c1,r2,c2;
    int a,x[20];
} cmd[MAXN];

int simulate(int *r0,int *c0)
{
    for(int i=0; i<n; i++)
    {
        if(cmd[i].c[0]=='E')
        {
            if(cmd[i].r1==*r0&&cmd[i].c1==*c0)
            {
                *r0=cmd[i].r2;
                *c0=cmd[i].c2;
            }
            // 必须用else if 不能用if不然又交换回去
            else if(cmd[i].r2==*r0&&cmd[i].c2==*c0)
            {
                *r0=cmd[i].r1;
                *c0=cmd[i].c1;
            }
        }
        else
        {
            // 在一个操作完成后变动数据,提前变动会出问题
            int dr=0,dc=0;
            for(int j=0;j<cmd[i].a;j++)
            {
                int x=cmd[i].x[j];
                if(cmd[i].c[0]=='I')
                {
                    if(cmd[i].c[1]=='R'&&x<=*r0)
                        dr++;
//                        *r0=*r0+1;
                    if(cmd[i].c[1]=='C'&&x<=*c0)
                        dc++;
//                        *c0=*c0+1;
                }
                else
                {
                    if(cmd[i].c[1]=='R'&&x==*r0)
                        return 0;
                    if(cmd[i].c[1]=='C'&&x==*c0)
                        return 0;
                    if(cmd[i].c[1]=='R'&&x<*r0)
                        dr--;
//                        *r0=*r0-1;
                    if(cmd[i].c[1]=='C'&&x<*c0)
                        dc--;
//                        *c0=*c0-1;
                }
            }
//            *r0+=dr;
//            *c0+=dc;

        }
    }
    return 1;
}

int main()
{
#ifdef LOCAL
    freopen("input","r",stdin);
//    freopen("output","w",stdout);
#endif // LOCAL

    while(cin>>r>>c>>n&&r)
    {
        for(int i=0; i<n; i++)
        {
            cin>>cmd[i].c;
            if(cmd[i].c[0]=='E')
            {
                cin>>cmd[i].r1>>cmd[i].c1>>cmd[i].r2>>cmd[i].c2;
            }
            else
            {
                cin>>cmd[i].a;
                for(int j=0; j<cmd[i].a; j++)
                {
                    cin>>cmd[i].x[j];
                }
            }

        }
        if(num>0)
            cout<<endl;
        cout<<"Spreadsheet #"<<++num<<endl;
        int q=0;
        cin>>q;
        while(q--)
        {
            int r0,c0;
            cin>>r0>>c0;
            cout<<"Cell data in ("<<r0<<","<<c0<<") ";
            if(!simulate(&r0,&c0))
                cout<<"GONE"<<endl;
            else
                cout<<"moved to ("<<r0<<","<<c0<<")"<<endl;
        }
    }

    return 0;
}

uva 512的更多相关文章

  1. Uva - 512 - Spreadsheet Tracking

    Data in spreadsheets are stored in cells, which are organized in rows (r) and columns (c). Some oper ...

  2. 【例题 4-5 uva 512】Spreadsheet Tracking

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 每个操作对与一个点来说变化是固定的. 因此可以不用对整个数组进行操作. 对于每个询问,遍历所有的操作.对输入的(x,y)进行相应的变 ...

  3. The Super Powers UVA 11752 分析分析 求无符号长整形以内的数满足至少可以用两种不同的次方来表示。比如64 = 2^6 = 8^2; 一个数的1次方不算数。

    /** 题目:The Super Powers UVA 11752 链接:https://vjudge.net/contest/154246#problem/Y 题意:求无符号长整形以内的数满足至少可 ...

  4. 1Z0-053 争议题目解析512

    1Z0-053 争议题目解析512 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 512.Which two statements correctly describe the r ...

  5. uva 1354 Mobile Computing ——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5

  6. UVA 10564 Paths through the Hourglass[DP 打印]

    UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...

  7. UVA 11404 Palindromic Subsequence[DP LCS 打印]

    UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...

  8. UVA&&POJ离散概率与数学期望入门练习[4]

    POJ3869 Headshot 题意:给出左轮手枪的子弹序列,打了一枪没子弹,要使下一枪也没子弹概率最大应该rotate还是shoot 条件概率,|00|/(|00|+|01|)和|0|/n谁大的问 ...

  9. UVA计数方法练习[3]

    UVA - 11538 Chess Queen 题意:n*m放置两个互相攻击的后的方案数 分开讨论行 列 两条对角线 一个求和式 可以化简后计算 // // main.cpp // uva11538 ...

随机推荐

  1. Oracle数据库获取uuid函数

    Oracle新建系统表时,要求主键为32位uuid,推測Oracle肯定会提供相关的函数. 翻阅相关文档,果然发现Oracle提供的函数 sys_guid() 用于获取32位uuid,简单使用为 se ...

  2. 打开或者 关闭 php 的错误报告

    一般线上的环境,我会 php的报错信息屏蔽掉,php.ini 设置的办法 如下: display_errors = Off error_reporting = E_ALL 在代码中,可以这样~~: e ...

  3. JVM性能优化, Part 5 Java的伸缩性

    很多程序员在解决JVM性能问题的时候,花开了很多时间去调优应用程序级别的性能瓶颈,当你读完这本系列文章之后你会发现我可能更加系统地看待这类的问题.我说过JVM的自身技术限制了Java企业级应用的伸缩性 ...

  4. linux 5-sort,uniq,tar,split

    十二.   行的排序命令sort:   1.  sort命令行选项: 选项 描述 -t 字段之间的分隔符 -f 基于字符排序时忽略大小写 -k 定义排序的域字段,或者是基于域字段的部分数据进行排序 - ...

  5. 4django模板

    在前面的几节中我们都是用简单的django.http.HttpResponse来把内容显示到网页上,本节将讲解如何使用渲染模板的方法来显示内容 1.创建一个 zqxt_tmpl 项目,和一个 名称为 ...

  6. LeetCode:字符串的排列【567】

    LeetCode:字符串的排列[567] 题目描述 给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列. 换句话说,第一个字符串的排列之一是第二个字符串的子串. 示例1: ...

  7. JS实现下拉列表的二级联动

    这个是简单也是最基本的下拉框联动的示例,这个示例主要针对那些只有二级联动,且第一级是固定的选项,第二级的内容也比较简单,不刷新的联动,动态的联动需要检索数据库,这个对不需要更新的二级联动比较实用.这里 ...

  8. [原创]java WEB学习笔记12:一个简单的serlet连接数据库实验

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  9. Docker 数据管理-三种数据mount方式

    可以在Container可写层存储数据,但是有三个缺点: 当Container销毁时,数据不能持久保存. Container的可写层和Container所在的主机紧耦合,不容易将数据移动到其他地方. ...

  10. JavaWeb -- Cookie应用实例 -- 购物历史记录

    1. 页面一:主页面                                         页面二: 详细显示页面   Demo2 负责页面一, 显示商品清单和历史记录 Demo3负责页面二 ...