spin_USACO
Spinning Wheels
1998 ACM NE Regionals
Each of five opaque spinning wheels has one or more wedges cut out of its edges. These wedges must be aligned quickly and correctly. Each wheel also has an alignment mark (at 0 degrees) so that the wheels can all be started in a known position. Wheels rotate in the `plus degrees' direction, so that shortly after they start, they pass through 1 degree, 2 degrees, etc. (though probably not at the same time).
This is an integer problem. Wheels are never actually at 1.5 degrees or 23.51234123 degrees. For example, the wheels are considered to move instantaneously from 20 to 25 degrees during a single second or even from 30 to 40 degrees if the wheel is spinning quickly.
All angles in this problem are presumed to be integers in the range 0 <= angle <= 359. The angle of 0 degrees follows the angle of 359 degrees. Each wheel rotates at a certain integer number of degrees per second, 1 <= speed <= 180.
Wedges for each wheel are specified by an integer start angle and integer angle size (or `extent'), both specified in degrees. Wedges in the test data will be separated by at least one degree. The 'extent' also includes the original "degree" of the wedge, so '0 180' means degrees 0..180 inclusive -- one more than most would imagine.
At the start, which is time 0, all the wheels' alignment marks line up. Your program must determine the earliest time (integer seconds) at or after the start that some wedge on each wheel will align with the wedges on the other wheel so that a light beam can pass through openings on all five wedges. The wedges can align at any part of the rotation.
PROGRAM NAME: spin
INPUT FORMAT
Each of five input lines describes a wheel.
The first integer on an input line is the wheel's rotation speed. The next integer is the number of wedges, 1 <= W <= 5. The next W pairs of integers tell each wedge's start angle and extent.
SAMPLE INPUT (file spin.in)
30 1 0 120
50 1 150 90
60 1 60 90
70 1 180 180
90 1 180 60
OUTPUT FORMAT
A single line with a single integer that is the first time the wedges align so a light beam can pass through them. Print `none' (lower case, no quotes) if the wedges will never align properly.
SAMPLE OUTPUT (file spin.out)
9
一架纺车有五个纺轮(也就是五个同心圆),这五个不透明的轮子边缘上都有一些缺口。这些缺口必须被迅速而准确地排列好。每个轮子都有一个起始标记(在0度),这样所有的轮子都可以在统一的已知位置开始转动。轮子按照角度变大的方向旋转(即0经过旋转到达1的位置),所以从起始位置开始,在一定的时间内,它们依次转过1度,2度等等(虽然这些轮子很可能不会同时转过这些角度)。
这是一个整数问题。轮子不会转过1.5度或23.51234123度这样的角度。例如,轮子可能在一秒钟内转过20到25度甚至30到40度(如果转得快的话)。
这个问题中的所有角度都限制在 0 <= 角度 <= 359 这个范围内。轮子转过 359 度后接下来就是 0 度。每个轮子都有一个确定的旋转速度,以秒作为单位。1 <= 速度 <= 180。
轮子上的缺口的起始角度和缺口大小(或宽度)各由一个整数表示,都以度为单位。在一个轮子上,两个缺口之间至少有一度的间隔。宽度也包含缺口起始的角度,即0 180包括0..180共计181个角度,比一般人想象的多一个。
在起始位置,设时间为 0,所有的轮子的起始标记排列成一条直线。你的程序必须计算,最早出现每个的轮子上的缺口同其他轮子上的缺口对准(也就是一束光可以通过五个轮子上的五个缺口)情况的时间。这些缺口在任意一个角度对准。
bitset版本:
/*
ID: LinKArftc
PROG: spin
LANG: C++
*/ #include <map>
#include <set>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <cstdio>
#include <string>
#include <bitset>
#include <utility>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define eps 1e-8
#define randin srand((unsigned int)time(NULL))
#define input freopen("input.txt","r",stdin)
#define debug(s) cout << "s = " << s << endl;
#define outstars cout << "*************" << endl;
const double PI = acos(-1.0);
const int inf = 0x3f3f3f3f;
const int INF = 0x7fffffff;
typedef long long ll; int speed[]; int main() {
freopen("spin.in", "r", stdin);
freopen("spin.out", "w", stdout);
bitset <> now[], tmp[];
for (int i = ; i <= ; i ++) {
int x;
scanf("%d %d", &speed[i], &x);
int s, t;
for (int j = ; j <= x; j ++) {
scanf("%d %d", &s, &t);
t += s;
for (int k = s; k <= t; k ++) now[i].set(k % );
}
}
for (int k = ; k < ; k ++) {
for (int i = ; i < ; i ++) {
bool flag = false;
for (int j = ; j <= ; j ++) {
if (!now[j].test(i)) {
flag = true;
break;
}
}
if (!flag) {
printf("%d\n", k);
return ;
}
}
for (int i = ; i <= ; i ++) {
for (int j = ; j < ; j ++) {
tmp[i][j] = now[i][(j + - speed[i]) % ];
}
now[i] = tmp[i];
}
}
printf("none\n"); return ;
}
spin_USACO的更多相关文章
随机推荐
- [OS] 进程间通信--管道
管道是单向的.先进先出的.无结构的.固定大小的字节流,它把一个进程的标准输出和另一个进程的标准输入连接在一起.写进程在管道的尾端写入数据,读进程在管道的首端读出数据.数据读出后将从管道中移走,其它读进 ...
- nginx 反向代理 ,入门
入门:http://www.cnblogs.com/jjzd/p/6691500.html 启动,重新加载:http://blog.csdn.net/zhongguozhichuang/article ...
- BZOJ 1079 着色方案(DP)
如果把当前格子涂什么颜色当做转移的话,状态则是每个格子的颜色数还剩多少,以及上一步用了什么颜色,这样的状态量显然是5^15.不可取. 如果把当前格子涂颜色数还剩几个的颜色作为转移的话,状态则是每个格子 ...
- IntelliJ IDEA2018注册
第一步:0.0.0.0 account.jetbrains.com及0.0.0.0 www.jetbrains.com 添加到hosts文件 第二步:进入 http://idea.lanyus.co ...
- 【以前的空间】Poj 3071 Cut the Sequence
dp+单调性+平衡树 在看某篇论文中看到这道题,但是那篇论文不如这个http://www.cnblogs.com/staginner/archive/2012/04/02/2429850.html 大 ...
- CF#312 558e A Simple Task
~~~题面~~~ 题解: 观察到字母只有26个,因此考虑对这26个字母分别维护,每个线段树维护一个字母,如果一个线段树的某个叶节点有值,表示当前叶节点所在位置的字母是现在这个线段树代表的字母. 那么对 ...
- BZOJ1040 骑士 【环套树 树形dp】
1040: [ZJOI2008]骑士 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 5611 Solved: 2166 [Submit][Stat ...
- 阿里云学生机——Mysql配置---教小白入门篇
首先,我的学生机默认配置为:CentOS 7.2 64位 + Tomcat 8 + Jdk8 + MySQL5.7.16 扩展:Linux 如何查看 MySQL 版本号----使用命令 mysql - ...
- dubbox小demo
概述: 我们建立两个web项目,一个是service负责提供服务,另一个是web项目负责调用服务. 两个项目都是 maven Project 项目 生产者项目: 项目中主要就是: pom文件,引入相关 ...
- ACE反应器(Reactor)模式(1)
转载于:http://www.cnblogs.com/TianFang/archive/2006/12/13/591332.html 1.ACE反应器框架简介 反应器(Reactor):用于事件多路分 ...