码迷,mamicode.com
首页 > 其他好文 > 详细

Educational Codeforces Round 77 (Rated for Div. 2) C. Infinite Fence

时间:2019-12-03 21:37:14      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:lld   ide   https   ons   最大公约数   get   string   print   长度   

C. Infinite Fence

题目大意:给板子涂色,首先板子是顺序的,然后可以涂两种颜色,如果是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");
    }
}
View Code

 

Educational Codeforces Round 77 (Rated for Div. 2) C. Infinite Fence

标签:lld   ide   https   ons   最大公约数   get   string   print   长度   

原文地址:https://www.cnblogs.com/EchoZQN/p/11979482.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!