USACO 3.2.3 Spin

最近总是刷水题啊...还是相当谁的题啊...而且水题也好久才A掉啊...郁闷...

好不容易想起来刷个USACO,又碰个水题...最近堕落了啊...

链接就不给了...

题也自便吧。

 

模拟秒之。判断每个时刻每个角度的缺口数(是相对与不转时的角度),如果有等于5的就答案了。因为360秒之后所有圆盘都同时回到原位,所以之枚举0到360的时间就好了。

代码:

View Code
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
using namespace std;
int s[6];
int b[6][360];
int flag;
void init()
{
memset(b,false,sizeof(b));
memset(s,0,sizeof(s));
flag=false;
int t,x,y;
for (int i=1;i<=5;i++)
{
scanf("%d%d",&s[i],&t);
for (int j=1;j<=t;j++)
{
scanf("%d%d",&x,&y);
for (int k=x;k<=x+y;k++) b[i][k%360]=true;
}
}
}
bool Judge(int x)
{
int v[360];
memset(v,0,sizeof(v));
for (int i=1;i<=5;i++)
for(int j=0;j<=359;j++)
if (b[i][j]) v[(j+x*s[i])%360]++;

for (int i=0;i<=359;i++)
if (v[i]==5)
{
return true;}
return false;
}
int main()
{
freopen("spin.in","r",stdin);
freopen("spin.out","w",stdout);
init();
flag=-1;
for (int i=0;i<=360;i++)
if (Judge(i))
{
flag=i;
break;
}
if (flag==-1) printf("none\n"); else printf("%d\n",flag);
return 0;
}
posted @ 2012-02-25 10:33  Evan1004  阅读(145)  评论(0编辑  收藏  举报