思路:
1.此题的
1
0
100
10^{100}
10100我们可以将它当成正无穷,我们设
x
=
m
i
n
(
r
,
b
)
x=min(r,b)
x=min(r,b),
y
=
m
a
x
(
r
,
b
)
y=max(r,b)
y=max(r,b),由于重复的部分我们可以涂任意颜色,因此我们需要做的就是讨论在
y
y
y的两个倍数之间可不可以夹
k
k
k或
k
k
k个以上的
x
x
x的倍数;
2.我们设在
m
y
my
my到
(
m
+
1
)
y
(m+1)y
(m+1)y这段区间内(即
[
m
y
+
1
,
m
y
+
2
,
.
.
.
,
m
y
+
y
−
1
]
[my+1,my+2,...,my+y-1]
[my+1,my+2,...,my+y−1])可以含有最多的
x
x
x的倍数,根据贪心的思想,我们希望
x
x
x的倍数第一次应该出现在
m
y
+
1
my+1
my+1,但是这需要
(
m
y
+
1
)
m
o
d
x
=
0
(my+1)modx=0
(my+1)modx=0;根据扩展欧几里得算法有解的条件,我们可以得知在这段区间内,
x
x
x的倍数最早第一次出现的位置应该在
m
y
+
g
c
d
(
x
,
y
)
my+gcd(x,y)
my+gcd(x,y),得知最早第一次出现的位置,我们就可以计算整个区间内
x
x
x的倍数出现的最多次数了~,然后和
k
k
k做比较即可;
代码:
#define IOS ios::sync_with_stdio(false);cin.tie(0)
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
int main(){
int t; cin>>t;
while(t--){
LL r,b,k;
cin>>r>>b>>k;
LL x=min(r,b),y=max(r,b);
LL g=gcd(x,y);
if(((y-1)/x+((y-1)%x>=g?1:0))>=k) puts("REBEL");
else puts("OBEY");
}
return 0;
}