zoukankan      html  css  js  c++  java
  • usaco-3.2-spin-pass

        模拟题,量不大。

        转动360秒以后,所有轮子回到起始角度。因此如果360秒以后还没有出现重合情况的话,就可以退出循环了。

        如何判断五个轮子重合呢?起初我也没有很好的方法,一个个去判断重合区域实在是太麻烦了。后来想到一个好方法。把 360度的轮子分成360个区域,用整形数组表示,如果一个轮子的缺口在这个区域内,则这个小区域加1,计算5个轮子的所有缺口。然后遍历这个数组,如果 有个区域的值>=5,表明这个区域上面至少有5个缺口,则5个缺口重合,退出循环。

    /*
    ID: qq104801
    LANG: C++
    TASK: spin
    */
    
    #include <iostream>
    #include <fstream>
    #include <bitset>
    #include <cstdio>
    #include <algorithm>
    
    using namespace std;
    
    #define PI 360
    int speed[6];
    bitset<PI> curr[6],next[6];
    
    void test()
    {    
        freopen("spin.in","r",stdin);
        freopen("spin.out","w",stdout);
        int num,start,end;
        for(int i=1;i<=5;i++)
        {
            cin>>speed[i]>>num;
            for(int j=1;j<=num;j++)
            {
                cin>>start>>end;
                end+=start;
                for(int k=start;k<=end;k++)
                    curr[i].set(k%PI);
            }
        }
    
        int angle=0;
        bool flag;
        while(angle<PI)
        {
            for(int i=0;i<PI;++i)
            {
                flag=false;
                for(int j=1;j<=5;j++)
                    if(!curr[j].test(i))
                    {
                        flag=true;
                        break;
                    }
                if(!flag)
                {
                    cout<<angle<<endl;
                    return;
                }    
            }
                
            for(int i=1;i<=5;i++)
            {
                for(int j=0;j<PI;j++)
                    next[i][j]=curr[i][(j+PI-speed[i])%PI];
                curr[i]=next[i];
            }
            ++angle;
        }
        cout<<"none"<<endl;
     
    }
    
    int main () 
    {        
        test();        
        return 0;
    }

    test data:

    USACO Training
    Grader Results     
    9 users online
    CHN/3 IND/1 IRN/1 KGZ/1 ROM/1 USA/1 VNM/1
    
    USER: cn tom [qq104801]
    TASK: spin
    LANG: C++
    
    Compiling...
    Compile: OK
    
    Executing...
       Test 1: TEST OK [0.005 secs, 3376 KB]
       Test 2: TEST OK [0.019 secs, 3376 KB]
       Test 3: TEST OK [0.032 secs, 3376 KB]
       Test 4: TEST OK [0.019 secs, 3376 KB]
       Test 5: TEST OK [0.003 secs, 3376 KB]
       Test 6: TEST OK [0.016 secs, 3376 KB]
       Test 7: TEST OK [0.008 secs, 3376 KB]
       Test 8: TEST OK [0.030 secs, 3376 KB]
    
    All tests OK.
    
    YOUR PROGRAM ('spin') WORKED FIRST TIME! That's fantastic -- and a rare thing. Please accept these special automated congratulations.
    
    Here are the test data inputs:
    
    ------- test 1 ----
    30 1 0 120
    180 1 10 100
    35 1 20 90
    31 1 30 80
    32 1 50 60
    ------- test 2 ----
    30 1 350 350
    180 1 10 100
    35 1 67 23
    31 1 30 4
    32 1 50 7
    ------- test 3 ----
    180 1 0 120
    180 1 120 120
    180 1 240 120
    31 1 30 4
    32 1 50 7
    ------- test 4 ----
    1 1 140 359
    1 1 200 359
    1 1 4 1
    2 1 6 1
    1 1 300 300
    ------- test 5 ----
    45 5 140 13 300 17 0 15 20 3 40 1
    73 1 200 359
    105 2 4 1 50 50
    179 3 6 1 8 1 359 3
    3 1 300 300
    ------- test 6 ----
    45 5 120 13 200 17 0 15 20 3 32 1
    73 5 200 100 1 30 50 10 70 2 75 1
    105 2 100 1 50 20
    179 3 6 1 8 1 359 3
    3 1 300 359
    ------- test 7 ----
    73 5 207 101 1 35 57 11 71 2 75 1
    45 5 125 13 200 17 0 15 20 3 32 1
    96 5 100 12 50 13 0 2 300 39 250 1
    119 5 6 1 8 1 359 1 245 1 123 1
    15 5 300 1 231 1 185 1 179 2 0 18
    ------- test 8 ----
    73 5 207 11 1 35 57 11 71 2 75 1
    45 5 125 3 200 17 0 15 20 3 32 1
    96 5 100 1 50 1 0 2 300 39 250 1
    119 5 6 1 8 1 359 1 245 1 123 1
    15 5 300 1 231 1 185 1 179 2 0 1
    
    Keep up the good work!
    Thanks for your submission!
    /***********************************************

    看书看原版,原汁原味。

    不会英文?没关系,硬着头皮看下去慢慢熟练,才会有真正收获。

    没有原书,也要网上找PDF来看。

    网上的原版资料多了去了,下载东西也到原始下载点去看看。

    你会知其所以然,呵呵。

    ***********************************************/

  • 相关阅读:
    Java不带.classpath的svn项目下载,转成到eclipse中
    eclipse 实用快捷键(最全)
    加密算法IV的作用
    Hadoop环境常用命令
    Centos网络配置
    apache指定的网络名不再可用
    Toritoisegit记住用户名密码
    用JavaScript修改CSS属性的代码
    div 旋转
    过滤器、监听器、拦截器的区别
  • 原文地址:https://www.cnblogs.com/dpblue/p/3967532.html
Copyright © 2011-2022 走看看