CodeForces - 1260C(貪心+思惟)

題意

https://vjudge.net/problem/CodeForces-1260Cios

有一串磚,凡是r的倍數而不是b的倍數必須塗紅,凡是b的倍數而不是r的倍數必須塗藍,是公倍數則選一個塗。把塗色的磚選出來以後,問是否必定有連續的k個磚是同一種顏色。c++

思路

當r和b有公因子(即gcd!=1)時,能夠發現只是跳過了一些數,和最簡形式沒有區別。那麼咱們先約簡,約簡後,若是r==b,那麼絕對是有解的(交題塗);不然,假設b>r,那麼序列必定是相似x r b r b r r b,由於b增加的更快,那麼對於一段連續的r,咱們要用兩個b去分隔它們,兩個b之間的位置個數是b-1,k個r要佔的長度是(k-1)*r+1,判斷兩個b之間能不能用這k個r填滿便可,若是能或者有多的位置,那麼不行;不然可行。spa

代碼

#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define ll long long
const int N=200005;
const int mod=1e9+7;
const double eps=1e-8;
const double PI = acos(-1.0);
#define lowbit(x) (x&(-x))
ll gcd(ll a,ll b)
{
    return b==0?a:gcd(b,a%b);
}
int main()
{
    std::ios::sync_with_stdio(false);
    int t;
    cin>>t;
    while(t--)
    {
        ll r,b,k;
        cin>>r>>b>>k;
        if(r>b)
            swap(r,b);
        ll g=gcd(r,b);
        r/=g,b/=g;
        if(r==b)
        {
            cout<<"OBEY"<<endl;
        }
        else if(b-1<(k-1)*r+1)
            cout<<"OBEY"<<endl;
        else
            cout<<"REBEL"<<endl;
    }
    return 0;
}
相關文章
相關標籤/搜索