Infinite Fence(裴蜀定理)


Problem - 1260C - Codeforces

你是一个叛军领袖,你正计划在你的国家发动一场革命。但邪恶的政府发现了你的计划,对你的惩罚是劳动教养。

你必须用两种颜色涂抹一个由10100块木板组成的栅栏,方法如下(假设木板从0开始从左到右编号)。

如果木板的指数可以被r整除(这种木板的指数为0、r、2r,以此类推),那么你必须把它涂成红色。
如果木板的指数能被b整除(这种木板的指数为0、b、2b等),那么你必须把它涂成蓝色。
如果索引既能被r又能被b整除,你就可以选择颜色来涂抹木板。
否则,你根本不需要给木板上漆(而且禁止在木板上用漆)。
此外,政府还增加了一个额外的限制,使你的惩罚更加严重。让我们把栅栏上的所有油漆木板按升序排列:如果在这个列表中连续有K块相同颜色的木板,那么政府将说明你的劳动失败,并立即处决你。如果你不按照上述四个条件涂抹栅栏,你也将被处决。

问题是:你是否能够完成劳动(时间并不重要),或者执行是不可避免的,你需要不惜一切代价逃跑。

输入
第一行包含单个整数T(1≤T≤1000)--测试案例的数量。

接下来的T行包含测试用例的描述--每行一个。每个测试案例包含三个整数r,b,k(1≤r,b≤109,2≤k≤109)--相应的系数。

输出
打印T字-每行一个。对于每个测试案例,如果执行是不可避免的,打印REBEL(不区分大小写),否则打印OBEY(不区分大小写)。

例子
输入复制
4
1 1 2
2 10 4
5 2 3
3 2 2
outputCopy
OBEY
REBEL
OBEY
OBEY
 

首先引入一个概念裴蜀定理

gcd(a,b) = c那么一定(x*a+y*b)为c的倍数,一定存在整数x,y使得a*x+b*y = c

本题思路

出现连续为k个颜色块的情况一定是在(假设r<b)某个b*x~b*(x+1)的区间中有连续k个r

利用贪心的思想求最大的情况应是y*r - x*b = ?

利用裴蜀定理我们可以得到所求区间中第一个r与左边界的距离

b减去这个距离得到一个p

出现k个r的最小所需距离为(k-1)*r+1;

如果p>=(k-1)*r+1说明一定会执行

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		long long l,r,k;
		scanf("%lld%lld%lld",&l,&r,&k);
		long long kong = __gcd(l,r);
		long long you = max(l,r) - kong;
		long long need = min(l,r)*(k - 1) + 1;
		if(you >= need)
		{
			printf("REBEL\n");
		}
		else
		{
			printf("OBEY\n");
		}
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值