当前位置:
首页 >
CF1260C-Infinite Fence【结论题】
发布时间:2023/12/3
74
豆豆
生活随笔
收集整理的这篇文章主要介绍了
CF1260C-Infinite Fence【结论题】
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
正题
题目链接:https://www.luogu.com.cn/problem/CF1260C
题目大意
无数个栏杆,rrr的倍数染成红色,bbb的倍数染成蓝色,是rrr和bbb的倍数的话可以选择一个染色,去掉没有染色的,是否有一种方案使得最长的染色快不超过kkk个。
解题思路
显然在rrr和bbb的最小公倍数左右两种颜色是一样的,所以只需要考虑每个公倍数为一段之间的最长连续色块。
假设r>br>br>b,我们计算最长色块,显然边上的色块长度是r/br/br/b。
先将rrr和bbb除于最小公因数ggg,考虑计算中间的,因为无限延伸,总会有一种情况使得一个蓝色块搞好在红色块的后第ggg个位置,那么此时是中间最长的,长度为(r−2)/b+1(r-2)/b+1(r−2)/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【结论题】的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Win10系统如何切换显卡笔记本电脑显卡
- 下一篇: P6477-[NOI Online #2