Spinning Wheels

                        Spinning Wheels

一架纺车有五个纺轮,这五个不透明的轮子边缘上都有一些缺口。这些缺口必须被迅速而准确地排列好。每个轮子都有一个起始标记(在0度),这样所有的轮子都可以在统一的已知位置开始转动。轮子按照角度变大的方向旋转,所以从起始位置开始,在一定的时间内,它们依次转过1度,2度等等(虽然这些轮子很可能不会同时转过这些角度)。

这是一个整数问题。轮子不会转过1.5度或23.51234123度这样的角度。例如,轮子可能在一秒钟内转过20到25度甚至30到40度(如果转得快的话)。

这个问题中的所有角度都限制在 0 <= 角度 <= 359 这个范围内。轮子转过 359 度后接下来就是 0 度。每个轮子都有一个确定的旋转速度,以秒作为单位。1 <= 速度 <= 180。

轮子上的缺口的起始角度和缺口大小(或长度)各由一个整数表示,都以度为单位。在一个轮子上,两个缺口之间至少有一度的间隔。

在起始位置,设时间为 0,所有的轮子的起始标记排列成一条直线。你的程序必须计算,最早出现每个的轮子上的缺口同其他轮子上的缺口对准(也就是一束光可以通过五个轮子上的五个缺口)情况的时间。这些缺口在任意一个角度对准。


[编辑]格式

PROGRAM NAME: spin

INPUT FORMAT:

(file spin.in)

输入中的五行对应五个轮子。

第一个数字表示轮子的转动速度。下一个数字是缺口的数目 W。1 <= W <= 5。接下来的 W 对数字表示每个缺口的起始角度和长度。

OUTPUT FORMAT: (file spin.out)

只有一行,包括一个整数,表示光能够通过这五个轮子的最早时间。如果无解,输出‘none‘(小写,不含引号)。


[编辑]SAMPLE INPUT

30 1 0 120
50 1 150 90
60 1 60 90
70 1 180 180
90 1 180 60

[编辑]SAMPLE OUTPUT

9

way:果然。一开始完全不知道怎么下手。这究竟是神马!后面看大神竟然是模拟。就是让时间一秒一秒的过去,然后看是否能够对齐就OK了。为什么可以这么这么做呢?因为度数 一共就360.因为 路程是在模360意义下的。 速度不变。 其实就是时间实在模360s意义下的。(意思就是360s时,转了 v[i]*360 % 360 == 0了 就相当于没有转动)。所以时间就非常有限了。所以直接模拟。well done。

代码:
/*
ID:Andy Chen
LANG:C++
PROG:spin
*/
#include <stdio.h>
#include <iostream>
using namespace std;

struct ss
{
       int s,t;
} a[6][1000];
int v[6];
int times[400];
int tot[6],ans;
bool can;

void check(int t)
{
     fill_n(times,360,0);
     for (int i=1;i<=5;++i)
         for (int j=1;j<=tot[i];++j)
         {
             if (t) a[i][j].s=(a[i][j].s+v[i])%360;
             for (int k=0;k<=a[i][j].t;++k)
                 ++times[(a[i][j].s+k)%360];
         }
     for (int i=0;i<360;++i)
         if (times[i]>4)
         {
                       can=1;
                       ans=t;
                       return;
         }
}

int main()
{
    freopen("spin.in","r",stdin);
    freopen("spin.out","w",stdout);

    for (int i=1;i<=5;++i)
    {
        scanf("%d%d",&v[i],&tot[i]);
        for (int j=1;j<=tot[i];++j) scanf("%d%d",&a[i][j].s,&a[i][j].t);
    }

    for (int t=0;t<360;++t)
        if (!can)
           check(t);

    if (can) cout<<ans<<endl;
    else cout<<"none"<<endl;

    return 0;
}
时间: 2024-10-09 20:01:51

Spinning Wheels的相关文章

USACO Spinning Wheels

题意是给你五个轮子, 每个轮子上有一些开口, 现在每个轮子从0位置开始转动,问最短啥时候5个轮子的开口相遇,刚开始看这道题的时候没啥思路, 就像等到最后在写,最后还没思路看了题解, 直接模拟就行, 代码如下:(注意处理边界,他不是离散的360个口,而是一个区间. /* ID: m1500293 LANG: C++ PROG: spin */ #include <cstdio> #include <cstring> #include <algorithm> using n

[模拟]纺车的轮子 Spinning Wheels

题目链接 题目大意 5个轮子 每个轮子上面有w个缺口 缺口的初始角度是n 宽度是m 每秒转速v 求当他们同时开始转的情况下,什么时候他们的缺口足以让一道阳光通过(就是有重叠部分) 思考 纯模拟题目没啥说的,就是模拟轮子转1S 2S 3S .... 10000S 每个缺口的状态 并判断一下 如果有则输出 #include <cstdio> #include <cstring> int v[6],s[6],pos[400],x[6][6],y[6][6],i,j,k,t; int ma

英文阅读--20140911NPR

Your Favorite Sites Will 'Slow Down' Today, For A Cause i Slow-loading messages will appear on some of your favorite sites Wednesday as part of a protest for net neutrality. But the sites won't actually be loading slower - the banners will be display

Java基础-继承-编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。

#29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight.小车类Car是Vehicle的子类,其中包含的属性有载人数 loader.卡车类Truck是Car类的子类,其中包含的属性有载重量payload.每个 类都有构造方法和输出相关数据的方法.最后,写一个测试类来测试这些类的功 能. package hanqi; public class Vehicle { private int wheels; private int weight

uva10067 Playing with Wheels 【建图+最短路】

题目:uva10067 Playing with Wheels 题意:给出一个机器,有四个循环的轮子,见图,然后给出一个初始数和目标数,然后期间不能出现的数字,每一分钟可以拨动一个数,问你最短需要的时间. 分析:这个题目可以转化为求图的最短路. 因为有对于一个当前状态,有8种可以转化为的状态,那么我们可以把每一种状态转化为一个点,然后状态之间连长度 1 的边,然后求一次初始状态到目标状态的最短路. 开始的时候我们每一组数据建图一次,下来0.9s,然后优化了一下,就是在每次建图不能到达的边删除之后

A Country on Wheels【车轮上的国家】

A Country on Wheels As cultural symbols go, the American  car is quite young. 作为文化象征的美国汽车还相当年轻. The Model T Ford was built at the Piquette Plant in Michigan a century ago, with the first rolling off the assembly line on September 27, 1908. 福特T型汽车一个世纪

Win32API界面库 - Project wheels 工程基础部分完成

离上次发博文过去了好久,先是要忙一个机器人的项目,然后就是部门的事情和考试周复习,然后就到了考试周,趁着复习的间隙,拾起了寒假时候抄的界面库,修掉了从前的bug. bug1 控件显示问题 当初抄这个库的时候就对排版部分的代码一头雾水,借着这次调bug,稍微理清了排版部分代码的意图.界面的排版是动态进行的,用户用placement命名空间的各种排版元素构造出整个排版的结构布局,然后调用WinForm对象的ApplyPlacement成员,把前面构造好的布局传给它,函数内部递归地读取结构对象的大小和

Wheels(bfs遍历,CERC 2014)

原题链接:http://acm.hnu.cn/online/?action=problem&type=show&id=13397 对于每一个已经开始运动的轮子要求它周围和他相接触的轮子的运动状态,然后让那些轮子依次进入队列= = 速度关系== 高中学过物理应该都知道吧 1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 #include<algorithm> 5 #inc

USACO3.2--Spinning Wheels

题目的关键在于360秒后,所有的轮子都会回到原位.然后就可以暴力模拟每一秒的的情况了,因为是周期性还要注意一些细节需要注意. 代码如下: /* ID: 15674811 LANG: C++ TASK: spin */ #include<iostream> #include<cstdio> #include<cstring> using namespace std; typedef struct { int xx[6],yy[6]; int w,cnt; }P; P p[