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. mysql 大数据 查询方面的测试

    ---方法1: 直接使用数据库提供的SQL语句---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N---适应场景: 适用于数据量较少的情况(元组百/千 ...

  2. Redis持久化——AOF(二)

    核心知识点: 1.AOF:以独立日志的方式记录写命令,重启时再执行命令.与RDB不同的是解决数据持久化的实时性,可以记录所有写操作. 2.AOF工作流程:写入命令.文件同步.文件重写.文件加载. 3. ...

  3. mysql设置有外键的主键自增及其他

    有外键的主键设置自增. ; ALTER TABLE `<table>` MODIFY COLUMN `id` ) NOT NULL AUTO_INCREMENT FIRST; 创建数据库, ...

  4. selenium主要功能封装

    最近实习需要使用selenium这一自动化工具对公司的运维监控系统进行自动化爬取数据,编写代码过程中负责带我的杰哥让我参考借鉴他们公司外包的运维监控系统代码,在项目中我看到了对selenium主要各功 ...

  5. python 3 并发编程之多进程 multiprocessing模块

    一 .multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程. ...

  6. vary的用法

    对于vary的用法,网上有许多种说法,云里雾里的,在此仅阐述一下本人的一些理解,首先是官方解释: Vary头域值指定了一些请求头域,这些请求头域用来决定: 当缓存中存在一个响应,并且该缓存没有过期失效 ...

  7. 第二十四篇、socketserver源码剖析

    这里选择的是python2.7(python3和2.7的源码基本类似) #!/usr/bin/env python # -*- coding:utf-8 -*- import SocketServer ...

  8. 正确认识 DIV+CSS 概念

    今天看到神采飞扬发表于前端观察的<DIV+CSS 请不要再忽悠人了>,讲的挺有深意的,尤其对于新手如何正确认识div,学习web标准,使用web标准建站应该有很大帮助.转载过来,共同分享. ...

  9. 2015 ETSI NFV用例指南

    译者简介:忍忍鱼,曾经从SDNLAB获取了很多知识,现在努力为SDNLAB贡献自己的力量.爱学习,求进步!SDNLAB,么么哒! ETSI NFV ISG已经确定了9个潜在的NFV用例.本章节简单介绍 ...

  10. eclipse自动提示功能没了的解决办法

    由于重新配置了环境,并且eclipse也是装的4.2的,今天用的时候发现了,居然没有自动提示功能,也就是当一个对象居然点不出他的相关方法.后来网上搜索了下,成功的 办法是. 1.我window-> ...