zoukankan      html  css  js  c++  java
  • SCAU 8631 盒子上的蚂蚁

    8631 盒子上的蚂蚁

    时间限制:500MS  内存限制:1000K 提交次数:0 通过次数:0

    题型: 编程题   语言: 无限制

    Description

    2009 年国际ACM 程序设计大赛在中国的最后一场regional于11月8日结束,随着在这场比赛中
    获得的一枚金牌,SCAU以两金两银的成绩,结束了09年的所有赛事。大家就回到正常的上课时间了。
    生活总是十分枯燥的,特别是比赛刚结束的时候,因为空出了很多平常训练的时间,而又想好好放松
    一下。所以,suno去玩dota去了,kicd去玩波斯王子去了,zayhero准备去hk的论文,zjx20去玩机
    械迷城,livingroom看他的动漫去了,Arokenda去玩KOF去了,ipc和bm 也各玩各的去了......还有
    dragon123、pkkj、ick2 三个人正在抓紧时间尽情忽悠,完了之后就要开始地狱式的训练,准备World Final
    去了。
        总之,大家都玩去了,就剩下lyd 一个人很无聊不知道干啥。。。
        接着他看到桌子上有只蚂蚁,就抓来玩,好吧有够无聊的。。。
    Lyd 把那只可怜的蚂蚁放在一个正方体的盒子上,然后让它不断地在盒子上面爬-_-!!!
    在蚂蚁爬的时候,Lyd 还不停的转动盒子,然后他想知道在转动的过程中,蚂蚁会有多少次出现在盒子的顶部。
    每一秒蚂蚁会爬过一个面,而且它只会向前走,不会转弯,每一秒的同时Lyd 也会将盒子朝任意方向转动90 度。
    为了方便,我们对六个面分别定义为正面(面向Lyd),背面(正面的反面),左面(正面左方),右面
    (正面右方),顶(正面上方)和底(正面下方),并特指某整数时刻。而蚂蚁处在0 时刻的正面,且头朝
    上。

    同时,6 个转动方向如下:
    正面向左(即转动之后原先的正面变成了左面,其他依次类推)、正面向右、正面向上、正面向下、
    正面顺时针(绕正面的法线顺时针转)、正面逆时针。
        现给出Lyd 的转动次序,求蚂蚁出现在盒子的顶的次数。
    
    
    Hint
    第二个Sample转动如下:

    在3、4 秒的时候蚂蚁在顶。
    
    

    Input

    有多组测试数据(2000 组左右),每组测试数据有两行
    第一行是lyd 的转动次数n(1<=n<=1000)。
    第二行有n 个数,第i 个数表示第i 个动作。1 到6 分别表示正面向左、正面向右、正面向上、正面
    向下、正面顺时针、正面逆时针。
    数据读入以文件结束符结束。即输入输出类似如下(当然变量名啥的不必一样,VC下按ctrl+z 然后
    回车可结束程序):
    while(scanf("%d",&n)!=EOF)
    {
        for(i=1;i<=n;i++)
        scanf("%d",&act[i]);
        ……
        ……
        printf("%d\n",answer);
    }
    

    Output

    对于每组测试数据,只输出一行,每行一个数,表示蚂蚁出现在顶多少次。
    
    

    Sample Input

    1
    1
    5
    5 2 3 6 1
    

    Sample Output

    1
    2
    

    Hint

    
    

    Source

    lyd

    Provider

    admin

     

    #include<stdio.h>
    #include<string.h>
    
    void Traverse(int *temp, int *result, int act)
    {
        switch(act)
        {
            case 1: result[0] = temp[1];
                    result[1] = temp[2];
                    result[2] = temp[3];
                    result[3] = temp[0]; break;
         
           case 2:  result[0] = temp[3];
                    result[3] = temp[2];
                    result[2] = temp[1];
                    result[1] = temp[0]; break;
           
           case 3:  result[0] = temp[5];
                    result[5] = temp[2];
                    result[2] = temp[4];
                    result[4] = temp[0]; break;
                    
           case 4:  result[0] = temp[4];
                    result[4] = temp[2];
                    result[2] = temp[5];
                    result[5] = temp[0]; break;
                    
           case 5:  result[1] = temp[4];
                    result[4] = temp[3];
                    result[3] = temp[5];
                    result[5] = temp[1]; break;
                    
           case 6:  result[1] = temp[5];
                    result[5] = temp[3];
                    result[3] = temp[4];
                    result[4] = temp[1]; break;
                    
           default: return;
      
        }
        return;
    }
    
    int main()
    {
        int temp[6], result[6], roat[4];
        int i, j, count, T, act;
        roat[0] = 1; roat[1] = 5; roat[2] = 3; roat[3] = 6;
        
        while(scanf("%d",&T) != EOF)
        {
            for(i=0; i<6; ++i) result[i] = temp[i] = i+1;
            count = 0;
            for(i=1; i<=T; ++i)
            {
                scanf("%d", &act);
                Traverse(temp, result, act);
                for(j=0; j<6; ++j) temp[j] = result[j];
                if(roat[i%4] == result[4]) count++;
            }
            printf("%d\n", count);
        }
        return 0;
    }

    解题报告:

      

  • 相关阅读:
    png 图片的缩放
    数据结构>图的最短路径
    2007年7月25日在博客园的排名上升到前400名
    C# 汉字转拼音(全拼)
    修改 Linux 主机名
    C# 事件的继承
    一个实现了 IDisposable 接口的基类
    Windows 防火墙上也有端口映射功能
    网上邻居不能访问的问题
    令网站提速的7大秘方
  • 原文地址:https://www.cnblogs.com/liaoguifa/p/2776921.html
Copyright © 2011-2022 走看看