题目大意不难 由于没看到每次填充会清零和范围结果没想出来
三个坐标独立 互不影响
两个映射
知道 现在当前原来在哪里
知道 这里属于原来的位置现在在哪里
</pre><pre name="code" class="cpp">#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <map>
using namespace std;
#define maxn 3005
#define ll long long
char ch[10];
int lim[5];
int xyz1[5][1005];
int xyz2[5][1005];
int main()
{
int a,b,c;
while(scanf("%s",ch)!=EOF)
{
if(ch[2]=='L')
{
for(int i=1;i<=3;i++)
scanf("%d",&lim[i]);
for(int i=1;i<=3;i++)
for(int j=0;j<lim[i];j++)
{
xyz1[i][j]=j;
xyz2[i][j]=j;
}
puts("START");
}
if(ch[2]=='A')
{
int tmp=ch[4]-'0';
scanf("%d%d",&a,&b);
xyz2[tmp][xyz1[tmp][a]]=b;
xyz2[tmp][xyz1[tmp][b]]=a;
swap(xyz1[tmp][a],xyz1[tmp][b]);
}
if(ch[2]=='N')
{
ll tmp;
scanf("%lld",&tmp);
if(tmp>lim[1]*lim[2]*lim[3])continue;
tmp--;
a=tmp/(lim[2]*lim[3]);
tmp%=(lim[2]*lim[3]);
b=tmp/lim[3];
c=tmp%lim[3];
printf("%d %d %d\n",xyz2[1][a],xyz2[2][b],xyz2[3][c]);
}
if(ch[2]=='E')
{
scanf("%d%d%d",&a,&b,&c);
int ans=xyz1[1][a]*lim[2]*lim[3]+xyz1[2][b]*lim[3]+xyz1[3][c]+1;
printf("%d\n",ans);
}
}
return 0;
}