zoukankan      html  css  js  c++  java
  • USACO Spinning Wheels

     题意是给你五个轮子, 每个轮子上有一些开口, 现在每个轮子从0位置开始转动,问最短啥时候5个轮子的开口相遇,刚开始看这道题的时候没啥思路, 就像等到最后在写,最后还没思路看了题解, 直接模拟就行, 代码如下:(注意处理边界,他不是离散的360个口,而是一个区间。

    /*
        ID: m1500293
        LANG: C++
        PROG: spin
    */
    
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    bool whell[6][390];
    int w[5];
    int idx[5] = {0, 0, 0, 0, 0};
    
    int check()
    {
        for(int i=0; i<360; i++)
        {
            bool res = true;
            for(int j=0; j<5; j++)
            {
                res = res&whell[j][(idx[j]+i)%360];
            }
            if(res)
                return true;
        }
        return false;
    }
    
    int main()
    {
        freopen("spin.in", "r", stdin);
        freopen("spin.out", "w", stdout);
        memset(whell, 0, sizeof(whell));
        for(int i=0; i<5; i++)
        {
            scanf("%d", &w[i]);
            int t;
            scanf("%d", &t);
            for(int j=0; j<t; j++)
            {
                int st, wi;
                scanf("%d%d", &st, &wi);
                for(int k=st; k<=st+wi; k++)
                    whell[i][k%360] = 1;
            }
        }
        for(int i=0; i<360; i++)
        {if(check())
            {
                printf("%d
    ", i);
                return 0;
            }
            for(int j=0; j<5; j++)
            {
                idx[j] = ((idx[j]-w[j])%360+360)%360;        //注意这里可能为负数,wa了一次
            }
        }
        printf("none
    ");
    }

  • 相关阅读:
    HDU 3401 Trade
    POJ 1151 Atlantis
    HDU 3415 Max Sum of MaxKsubsequence
    HDU 4234 Moving Points
    HDU 4258 Covered Walkway
    HDU 4391 Paint The Wall
    HDU 1199 Color the Ball
    HDU 4374 One hundred layer
    HDU 3507 Print Article
    GCC特性之__init修饰解析 kasalyn的专栏 博客频道 CSDN.NET
  • 原文地址:https://www.cnblogs.com/xingxing1024/p/5087380.html
Copyright © 2011-2022 走看看