USACO 3.2.3 Spinning Wheels 模拟

USACO 3.2.3 Spinning Wheels 模拟
模拟1到359步就可以了。

/**/ /*
ID: lorelei
TASK: spin
LANG: C++
*/


#include 
< fstream >

using   namespace  std;

typedef 
struct  Gap {
    
int start;
    
int span;
}
Gap;

int  gap_num[ 5 ];
int  speed[ 5 ];
Gap gaps[
5 ][ 5 ];

ifstream fin;
ofstream fout;

void  move() {
    
int i,j;
    
for(i=0; i<5++i)
        
for(j=0; j<gap_num[i]; ++j)
            gaps[i][j].start 
= (gaps[i][j].start+speed[i])%360;
}


int  tmp[ 360 ];
bool  check() {
    
int i,j,k;
    
for(i=0; i<360++i) tmp[i]=0;

    
for(i=0; i<5++i)
        
for(j=0; j<gap_num[i]; ++j)
            
for(k=0; k<=gaps[i][j].span; ++k)
                tmp[(gaps[i][j].start
+k)%360]++;

    
for(i=0; i<360++i)
        
if(tmp[i]==5)
            
return true;

    
return false;
}


int  main() {
    
int i,j;
    
    fin.open(
"spin.in");
    fout.open(
"spin.out");

    
for(i=0; i<5++i){
        fin
>>speed[i];
        fin
>>gap_num[i];
        
for(j=0; j<gap_num[i]; ++j)
            fin
>>gaps[i][j].start>>gaps[i][j].span;
    }


    
if(check()){
        fout
<<0<<endl;
        
return 0;
    }


    
for(i=1; i<360++i){
        move();
        
if(check()){
            fout
<<i<<endl;
            
return 0 ;
        }

    }

    fout
<<"none"<<endl;

    
return 0;
}

你可能感兴趣的:(USACO 3.2.3 Spinning Wheels 模拟)