cf1260C-Infinite Fence(div2)

拦住我的沙比提

题意:

  • t组询问
  • 每个询问给定三个数r, b, k
  • 现在有一个从0为下标开始的围栏看作无限个
  • 现可以给部分围栏染色, 规定围栏 i : ( i % r = 0 ) i:(i\%r=0) i:(i%r=0), 则i号围栏可染蓝色, 若围栏 j : ( j % b = 0 ) j:(j \%b = 0) j:(j%b=0), 则可染红色, 如果以上两个条件均满足, 则可以一染成红色或蓝色, 反之不能染色
  • 问在所有已染色围栏是否存在连续k个颜色相同的围栏

数据范围: r , b k ≤ 1 e 9 , t ≤ 1000 r, b k \leq 1e9, t\leq 1000 r,bk1e9,t1000

>> face <<

前置技能:无

Tutorial: 关键是满足条件, 我原来是考虑 m i n ( r , b ) ∗ k < m a x ( r , b ) min(r, b)*k < max(r, b) min(r,b)k<max(r,b)这样考虑是不全的, 考虑这样一组样例: 2 5 3 ,染序列 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 0,1,2,3,4,5,6,7,8,9,10, 其中 0 , 5 , 10 0, 5, 10 0,5,10被5标记, 2 , 4 , 6 , 8 2, 4, 6, 8 2,4,6,8被2标记, 一种贪心的策略就是找到一个位置pos被5标记, pos+1被2标记, 考虑pos-pos+5这个区间, 如果这个区间正好出现3个,那么有len = 2*(k-1)+1, 即区间长度肯定要大于该值则有(k - 1) * r + 1 < b, 再考虑另一种样例, 4 2 3, 显然,这种样例找不到所定义的pos位置, 可予以考虑同时将r,b 除去公因子, 最后再判断一下极端情况int是否会溢出


#include <bits/stdc++.h>
using namespace std;
#define _rep(i, a, b) for (int i = (a); i <= (b); ++i)
#define _rev(i, a, b) for (int i = (a); i >= (b); --i)
#define _for(i, a, b) for (int i = (a); i < (b); ++i)
#define _rof(i, a, b) for (int i = (a); i > (b); --i)
#define oo 0x3f3f3f3f
#define ll long long
#define db double
#define eps 1e-8
#define bin(x) cout << bitset<10>(x) << endl;
#define what_is(x) cerr << #x << " is " << x << endl
#define met(a, b) memset(a, b, sizeof(a))
#define all(x) x.begin(), x.end()
#define pii pair<int, int>
int nxt()
{
	int ret;
	scanf("%d", &ret);
	return ret;
}
const int maxn = 2e5 + 10;
signed main()
{
	int n = nxt();
	while (n--)
	{
		ll r = nxt(), b = nxt(), k = nxt();
		ll g = __gcd(r, b);
		r /= g, b /= g;
		if (r > b)
			swap(r, b);
		if ((k - 1) * r + 1 < b)
			cout << "REBEL" << endl;
		else
			cout << "OBEY" << endl;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值