zoukankan      html  css  js  c++  java
  • C. Infinite Fence(数学,最小余数)

    传送门大门小门中门啊大家我

    (对于给定的r,b)

    (为了方便,设r<=b)

    (如果有k个块颜色相同)

    (那么一定是在某个[kb,(k+1)b]间连续有k个r的倍数)

    (因为一旦是b的倍数,就可以取不同的颜色,就达不到目的了.)

    (color{Orange}{于是,我们最少需要(k-1)*r+1的区间长度来构造})

    (但是出现b的倍数后,下一个出现的a的倍数位置不确定,我们能用的区间长度就不确定)

    (我们希望找一个a的倍数,尽量少的大于那个b的倍数,这样可用区间长就最多)

    (color{Red}{举个例子: 5 8 2 })

    (我们最少需要(2-1)*5+1的区间长度来构造)

    (然后我们发现25和24离得最近是1,那么可用区间就是32-25=7)

    (那么其实这个a倍数-b倍数的最小值就是gcd(r,b))

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    ll r,b,k;
    ll gcd(ll a,ll b){
    	return b==0?a:gcd(b,a%b);
    }
    int main()
    {
    	int t;cin>>t;
    	while(t--)
    	{
    		cin>>r>>b>>k;
    		//预期不可行,发现可行 
    		ll last=gcd(r,b);
    		ll empty=max(r,b)-last;//有这么大的空位
    		ll need=(k-1)*min(r,b)+1;//需要这么大
    		if(empty>=need)	cout<<"REBEL";
    		else	cout<<"OBEY";
    		cout<<endl; 
    	}
    }
    
  • 相关阅读:
    规格说明书-----吉林1日游
    每周代码及工作总结(第九周)
    评论beta发布
    每周代码及工作总结(第八周)
    半年之后没啥意思,开个博客
    本周例行报告
    final发布评论Ⅱ
    课堂final发布
    本周例行报告
    回顾
  • 原文地址:https://www.cnblogs.com/iss-ue/p/12895245.html
Copyright © 2011-2022 走看看