题目大意:给板子涂色,首先板子是顺序的,然后可以涂两种颜色,如果是r的倍数涂成红色,是b的倍数涂成蓝色,
连续的k个相同的颜色则不能完成任务,能完成任务则输出OBEY,否则输出REBEL
首先我们可以求b,r的gcd d=gcd(b,r)
然后b/=d,r/=d
然后让r<b if(r>b) swap(b,r)
然后如果要连续k个板子颜色涂成r,则要占的长度是 len = r*(k-1)+1
如果这个长度len>b 则可以完成,否则不可以完成
这个原因应该很好理解,但是为什么b,r 要先处理一下都除以d呢?
这个是因为如果b,r 不互质,则它们有一个最大公约数,所以他们每走一步都是最大公约数的整数倍数
如果本来就互质,那么最大公约数就是1,如果不互质,那么这个最大公约数d,其实就相当于这个1
所以除以d 不会影响结果。
#include <cstdio> #include <cstring> #include <algorithm> #include <queue> #include <iostream> #include <map> #include <vector> #define inf 0x3f3f3f3f-= #define debug(x) cout<<"x = "<<x<<endl; using namespace std; const int maxn=1e6+10; typedef long long ll; ll gcd(ll a,ll b){ return b==0?a:gcd(b,a%b); } int main(){ int t; scanf("%d",&t); while(t--){ ll r,b,k; scanf("%lld%lld%lld",&r,&b,&k); ll d=gcd(r,b); r/=d,b/=d; if(r>b) swap(r,b); if(r*(k-1)+1<b) printf("REBEL\n"); else printf("OBEY\n"); } }
原文地址:https://www.cnblogs.com/EchoZQN/p/11979482.html
时间: 2024-11-02 23:43:02