【NOIP2014】【Luogu2118】比例简化(枚举)

problem

  • 给定三个数A,B,L。将A:B化简为A`:B`。
  • 满足A`,B`都小于L。
  • A`,B`互质
  • A`/B`>=A/B
  • A`/B`-A/B尽可能小
  • A,B<1e6, L < 100

solution

总感觉最近写水题,写的有点,傻?。。
普及组的题,照例一定和枚举有点关系。。。L<100,那就枚举L把,才两个数又正好才n^2诶,,,
普及组的代码一定不长,那就,,瞎写吧。QwQ
emm而且枚举L都小于L这个条件就直接满足了,相当于枚举解决部分情况再去枚举其他的样子。
——

记c,d为答案。

  • GCD不说了。辗转相除法
  • c/d>=a/b的话,变为c*b=>a*d会准确一点。
  • c/d-a/b尽可能小就是:比如有两组答案,c1/d1-a/b < c2/d2-a/b显然c1d1组合是更优的,a/b直接没了,c1*d2 < c2*d1这样(当前答案i,j比预备答案c,d优,ij就是c1c2组合才更新嘛)。

codes

#include<iostream>
using namespace std;
int gcd(int a, int b){
    return !b?a:gcd(b,a%b);
}
int main(){
    int a, b, l;
    cin>>a>>b>>l;
    int c = l, d = 1;
    for(int i = 1; i <= l; i++)
        for(int j = 1; j <= l; j++)
            if(gcd(i,j)==1 && i*b>=j*a && i*d<c*j)
                { c = i, d = j; }
    cout<<c<<' '<<d<<'\n';
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_33957603/article/details/81193582
今日推荐