zoukankan      html  css  js  c++  java
  • zoj 4113 Cube Simulation ( ZOJ Monthly, November 2010 )

    题目地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4113

    思路:这个就是三维数组的地址和下标之间的对应。  然后涉及到一定的变换 ,我们有一个p【a】 记录在若干次对换之后实际对应的是哪个数。 同时,为了能用find函数找回坐标,我们还要记录反函数(写作pp【a】)

    然后这个value超过的xyz是不要输出的。

    代码:

    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<algorithm>
    using namespace std;
    
    
    
    int p[1010];
    int q[1010];
    int r[1010];
    
    int pp[1010];
    int qq[1010];
    int rr[1010];
    
    int x=1,y=1,z=1;
    
    int findx(int n)
    {
       return (n)/(y*z);
    
    }
    
    int findy(int n)
    {
       return (n%(y*z))/z;
    
    }
    
    int findz(int n)
    {
       return (n%z);
    }
    
    void  pre()
    {
       for(int i=0;i<1010;i++)
        {
          p[i]=i;
          q[i]=i;
          r[i]=i;
          pp[i]=i;
          qq[i]=i;
          rr[i]=i;
        }
    
    }
    
    
    int main()
    {
         string opcode;
         int a,b;
         int ansx,ansy,ansz;
         int value;
    
         int qx,qy,qz;
    
         int ans;
    
         while(cin>>opcode)
         {
             if(opcode=="FILL")
             {
                  pre();
                  cout<<"START"<<endl;
                  cin>>x>>y>>z;
    
    
             }
    
             else if(opcode=="SWAP1")
             {
                 scanf("%d%d",&a,&b);
    
    
                 swap(p[a],p[b]);
                 pp[p[a]]=a;
                 pp[p[b]]=b;
    
             }
    
    
              else if(opcode=="SWAP2")
             {
    
                 scanf("%d%d",&a,&b);
    
    
                 swap(q[a],q[b]);
                  qq[q[a]]=a;
                  qq[q[b]]=b;
    
             }
    
              else if(opcode=="SWAP3")
             {
                scanf("%d%d",&a,&b);
    
                  swap(r[a],r[b]);
    
                  rr[r[a]]=a;
                  rr[r[b]]=b;
             }
    
    
             else if(opcode=="FIND")
             {
                 scanf("%d",&value);
    
                 if(value<=x*y*z&&value>0)
                 {
    
                 ansx=findx(value-1);
                 ansy=findy(value-1);
                 ansz=findz(value-1);
    
                 ansx=pp[ansx];
                 ansy=qq[ansy];
                 ansz=rr[ansz];
    
                 printf("%d %d %d
    ",ansx,ansy,ansz);
    
                 }
             }
    
             else if(opcode=="QUERY")
             {
                  scanf("%d%d%d",&qx,&qy,&qz);
    
                  if(qx>=0&&qx<x&&qy>=0&&qy<y&&qz>=0&&qz<z)
                  {
    
                  ans=p[qx]*y*z+q[qy]*z+r[qz];
    
                  printf("%d
    ",ans+1);
    
                  }
             }
         }
         }
    


  • 相关阅读:
    数据共享之死锁
    响应式菜单制作
    工作日志2014-07-01
    Thinkphp 无法使用-&gt;order() 排序的两种解决的方法!
    C#
    HDU1232 畅通project 并查集
    Cocos2d-x优化中图片优化
    1.3.4 设计并发友好的应用程序
    UIView的层介绍
    《鸟哥的Linux私房菜-基础学习篇(第三版)》(三)
  • 原文地址:https://www.cnblogs.com/814jingqi/p/3339255.html
Copyright © 2011-2022 走看看