题解 P2728 【纺车的轮子 Spinning Wheels】

· · 题解

模拟题。找不到就输出none。

/*
ID: ylx14274
PROG: spin
LANG: C++     
*/
#include<set>  
#include<map>  
#include<list>  
#include<queue>  
#include<stack>  
#include<string>  
#include<math.h>  
#include<time.h>  
#include<vector>  
#include<bitset>  
#include<memory>  
#include<utility>  
#include<stdio.h>  
#include<sstream>  
#include<iostream>  
#include<stdlib.h>  
#include<string.h>  
#include<algorithm> 
#define LL unsigned long long   
using namespace std;
int v[6];//速度
int s[6];//数量
int x[6][6],y[6][6];//5个轮子5个洞
int i,j,k,t;//循环控制变量 
int a[361]; 
int b[6]; 
int main() 
{
    freopen("spin.in","r",stdin);
    freopen("spin.out","w",stdout); 
    for (i=1;i<=5;i++)
    {
        scanf("%d%d",&v[i],&s[i]);//读入速度和洞的数量
        for (j=1;j<=s[i];j++)//读入s[i]个洞 
            scanf("%d%d",&x[i][j],&y[i][j]);//读入洞的位置和宽度
    } //读入完毕
    //读进来了。要干嘛来着……
    for (t=0;t<=360;t++)//可能一开始就有一个地方5个轮子在那都是洞 
    {
        memset(a,0,sizeof(a));//a清0 
        for (i=1;i<=5;i++)//5个轮子
        {
            for (j=1;j<=s[i];j++)//s[i]个洞 
            {
                for (k=x[i][j];k<=x[i][j]+y[i][j];k++)//标记到数组a
                    a[k%360]++;//标记。记得取模 
                x[i][j]=(x[i][j]+v[i])%360;//下一秒状态。记得取模 
            } 
        } //标记完成 
        for (i=0;i<=359;i++)
        if (a[i]==5)//5个轮子在此处均为洞
        {
            printf("%d\n",t);//输出 
            return 0;
        } 
    } 
    printf("none\n");
    return 0; 
}