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. python cookbook第三版学习笔记十五:property和描述

    8.5 私有属性: 在python中,如果想将私有数据封装到类的实例上,有两种方法:1 单下划线.2 双下划线 1 单下划线一般认为是内部实现,但是如果想从外部访问的话也是可以的 2 双下划线是则无法 ...

  2. linux c编程:信号(一)

    信号是软件中断,很多比较重要的应用程序都需要处理信号.并且信号提供了一种处理异步事件的方法.如终端用户键入中断键,会通过信号机制停止一个程序,或及早终止管道中的下一个程序 很多条件都可以产生信号,比如 ...

  3. header函数使用

    header('HTTP/1.1 200 OK'); //设置一个404头: header('HTTP/1.1 404 Not Found'); //设置地址被永久的重定向 header('HTTP/ ...

  4. The given 'driver' ] is unknown, Doctrine currently supports only the follo wing drivers: pdo_mysql, pdo_sqlite, pdo_pgsql, pdo_oci, oci8, ibm_db2, pdo

    [Doctrine\DBAL\DBALException]                                                  The given 'driver' ] ...

  5. Swap file "/etc/.hosts.swp" already exists! [O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it,

    非正常关闭vi编辑器时会生成一个.swp文件 非正常关闭vi编辑器时会生成一个.swp文件 关于swp文件 使用vi,经常可以看到swp这个文件,那这个文件是怎么产生的呢,当你打开一个文件,vi就会生 ...

  6. HDU - 3081 Marriage Match II 【二分匹配】

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=3081 题意 有n对男女 女生去选男朋友 如果女生从来没和那个男生吵架 那么那个男生就可以当她男朋友 女 ...

  7. 2018年长沙理工大学第十三届程序设计竞赛 C 取手机 【概率】

    链接:https://www.nowcoder.com/acm/contest/96/C 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  8. swift ! 和 ? 的学习

    刚开始学 这两个符号 不确定到底是否是可以互相替代 用的都混淆了 今天好好做个总结 如果声明一个变量 如下 var  name:String?  //只声明 没做初始化赋值 说明 当前name 是 n ...

  9. Luogu P1377 [TJOI2011]树的序:离线nlogn建二叉搜索树

    题目链接:https://www.luogu.org/problemnew/show/P1377 题意: 有一棵n个节点的二叉搜索树. 给出它的插入序列,是一个1到n的排列. 问你使得树的形态相同的字 ...

  10. WebForm 使用点滴。。。。

    WebForm使用方式与WinForm很是相似,可控性非常高! 1.调用别的按钮事件: BtnSelect_Click(sender, e);