用一个数组记录轮子每个角度处是否有缺口,这样写起来最简单。
#include <iostream>
#include <vector>
using namespace std;
struct P{
int s, w;
vector<int> a; // 是否有缺口
}p[5];
int main()
{
int a, b;
for(int i = 0; i < 5; i ++ ){
cin >> p[i].s >> p[i].w;
p[i].a = vector(360, 0);
for(int j = 0; j < p[i].w; j ++ ){
cin >> a >> b;
for(int k = a; k <= a + b; k ++ ){
p[i].a[k % 360] = 1;
}
}
}
int res = 0;
while(1){
for(int i = 0; i < 359; i ++ ){
if(p[0].a[i] && p[1].a[i] && p[2].a[i] && p[3].a[i] && p[4].a[i]){
cout << res << endl;
return 0;
}
}
for(int i = 0; i < 5; i ++ ){
int s = p[i].s;
vector<int> a(360, 0);
for(int j = 0; j < 360; j ++ ){
if(p[i].a[j] == 1) a[(j + s) % 360] = 1;
}
p[i].a = a;
}
res ++ ;
if(res > 360){
cout << "none" << endl;
return 0;
}
}
return 0;
}