最多轉360秒,各個輪子就復位了。所以在360秒內,每過一秒檢測一下是否可以透過光即可。
用一個數組記錄能透過0-359的輪子的個數,當在某一度輪子的個數達到了5,則說明光可以透過,輸出即可。
否則說明是不可能有光透過。
#include?<iostream>
#include?<fstream>
using?namespace?std;
ifstream in("spin.in");
ofstream out("spin.out");
struct?wedge{
????int?start;
????int?extent;
};
int?speed[5];
wedge?wedges[5][5];
int?wedge_num[5];
void?onesecond()
{
???for(int?i=0;i<5;++i){
???????for(int?j=0;j<wedge_num[i];++j){
???????????wedges[i][j].start+=speed[i];
???????????wedges[i][j].start%=360;
???????}
???}?
}
bool?isok()
{
????int?tmp[360];
????memset(tmp,0,sizeof(tmp));
????for(int?i=0;i<5;++i){
????????for(int?j=0;j<wedge_num[i];++j){
????????????for(int?k=0;k<=wedges[i][j].extent;++k)
????????????????tmp[(wedges[i][j].start+k)%360]++;
????????}
????}
????for(int?i=0;i<360;++i)
????????if(tmp[i]==5)
????????????return?true;
????return?false;
}
void?solve()
{
????for(int?i=0;i<5;++i){
????????in>>speed[i];
????????in>>wedge_num[i];
????????for(int?j=0;j<wedge_num[i];++j){
????????????in>>wedges[i][j].start>>wedges[i][j].extent;
????????}
????}
????if(isok()){
????????out<<0<<endl;
????????return;
????}
????for(int?i=1;i<=360;++i){
????????onesecond();
????????if(isok()){
????????????out<<i<<endl;
????????????return;
????????}
????}
????out<<"none"<<endl;
}
int?main(int?argc,char?*argv[])
{
????solve();?
????return?0;
}