欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

CF1260C-Infinite Fence【结论题】

发布时间:2023/12/3 74 豆豆
生活随笔 收集整理的这篇文章主要介绍了 CF1260C-Infinite Fence【结论题】 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

正题

题目链接:https://www.luogu.com.cn/problem/CF1260C


题目大意

无数个栏杆,rrr的倍数染成红色,bbb的倍数染成蓝色,是rrrbbb的倍数的话可以选择一个染色,去掉没有染色的,是否有一种方案使得最长的染色快不超过kkk个。


解题思路

显然在rrrbbb的最小公倍数左右两种颜色是一样的,所以只需要考虑每个公倍数为一段之间的最长连续色块。

假设r>br>br>b,我们计算最长色块,显然边上的色块长度是r/br/br/b

先将rrrbbb除于最小公因数ggg,考虑计算中间的,因为无限延伸,总会有一种情况使得一个蓝色块搞好在红色块的后第ggg个位置,那么此时是中间最长的,长度为(r−2)/b+1(r-2)/b+1(r2)/b+1

所以判断即可。


codecodecode

#include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; ll T,a,b,k; ll gcd(ll x,ll y){if(!y) return x;return gcd(y,x%y); } int main() {//freopen("color.in","r",stdin);//freopen("color.out","w",stdout);scanf("%lld",&T);while(T--){scanf("%lld%lld%lld",&a,&b,&k);if(k==1){printf("REBEL\n");continue;}if(a<b)swap(a,b);ll g=gcd(a,b);a/=g;b/=g;if(a==1&&b==1)printf("OBEY\n");else if(b==1){if(a-b>=k)printf("REBEL\n");else printf("OBEY\n");}else{ll c=(a-2)/b+1,z=a/b;if(c>=k||z>=k) printf("REBEL\n");else printf("OBEY\n");}} }

总结

以上是生活随笔为你收集整理的CF1260C-Infinite Fence【结论题】的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。