Codeforces Round #292 (Div. 2) -- B. Drazil and His Happy Friends
思路:求最大公约数,如果是1,只要看是否有一个为快乐的,有则yes否则no,如果大于1,则看每个长度为t(最大公约数)(b和g可以分为好多个长度为t的区间)的区间中每个对应位置至少有一个是快乐的
AC代码:
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int gcd(int a, int b) { if(a > b) return gcd(b, a); if(b % a == 0) return a; return gcd(b % a, a); } int main() { int a[105], c[105], tmp[105]; int n, m, b, g, t, x; while(scanf("%d %d", &n, &m) != EOF) { memset(a, 0, sizeof(a)); memset(c, 0, sizeof(c)); memset(tmp, 0, sizeof(tmp)); scanf("%d", &b); for(int i = 0; i < b; i++) { scanf("%d", &x); a[x] = 1; } scanf("%d", &g); for(int i = 0; i < g; i++) { scanf("%d", &x); c[x] = 1; } if(gcd(n, m) == 1) { if(b + g >= 1) printf("Yes\n"); else printf("No\n"); continue; } if((t = gcd(n, m)) != 1){ for(int i = 0; i < n; i++) if(a[i]) tmp[i%t] = 1; for(int i = 0; i < m; i++) if(c[i]) tmp[i%t] = 1; } int cnt = 0; for(int i = 0; i < t; i++) if(tmp[i]) cnt++; if(cnt == t) printf("Yes\n"); else printf("No\n"); } return 0; }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。