ZOJ 3429 Cube Simulation 解题报告

题目

题意:

三维空间上定义了一些操作,就不翻译了……求每个询问操作的结果

题解:

本来以为很难,后来发现三个坐标是独立的,所以做到当前操作时,可以维护一个映射关系,原本的xi现在应该在xj,就可以直接求了。

难怪过的人最多


//Time:110ms
//Memory:204KB
//Length:1354B
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
#define MAXN 1010

int to[3][MAXN],nto[3][MAXN];
char str[20];
int main()
{
    //freopen("/home/moor/Code/input","r",stdin);
    int xy[3];
    while (scanf("%s",str)!=-1)
    {
        if(str[2]=='L')
        {
            for(int i=0;i<3;++i)    scanf("%d",&xy[i]);
            for(int i=0;i<3;++i)
                for(int j=0;j<=xy[i];++j)   to[i][j]=j,nto[i][j]=j;
            printf("START\n");
        }
        if(str[2]=='A')
        {
            int a,b,af,bf,w=str[4]-'1';
            scanf("%d%d",&a,&b);
            af=nto[w][a],bf=nto[w][b];
            swap(nto[w][a],nto[w][b]);
            swap(to[w][af],to[w][bf]);
        }
        if(str[2]=='N')
        {
            long long x;
            int tx,ty,tz,tmp=xy[1]*xy[2];
            scanf("%lld",&x);
            if(x>xy[0]*xy[1]*xy[2]) continue;
            --x;
            tx=x/tmp,ty=x/xy[2]%xy[1],tz=x%xy[2];
            tx=to[0][tx],ty=to[1][ty],tz=to[2][tz];
            printf("%d %d %d\n",tx,ty,tz);
        }
        if(str[2]=='E')
        {
            int tx,ty,tz;
            scanf("%d%d%d",&tx,&ty,&tz);
            tx=nto[0][tx],ty=nto[1][ty],tz=nto[2][tz];
            printf("%d\n",xy[1]*xy[2]*tx+xy[2]*ty+tz+1);
        }
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值