zoukankan      html  css  js  c++  java
  • Codeforces Round #554 (Div. 2) 1152C. Neko does Maths

    学了这么久,来打一次CF看看自己学的怎么样吧

    too young too simple

    1152C. Neko does Maths

    题目链接:"https://codeforces.com/contest/1152/problem/C"

    题目大意:给你两个数a,b,现在要你找出一个数k使得(a+k)和(b+k)的最小公倍数最小。

    题目思路:暴力(逃)

    这题没得思路,想了想既然求LCM了那么和GCD说不定有点关系

    然后就没有然后了

    比赛的时候交了一发暴力上去,然并软

    赛后补题,题解里面谈到了利用GCD求LCM(想对了???)

    首先你要知道一件事情:gcd(a+k,b+k)=gcd(b-a,a+k) ← (gcd(a,b)=gcd(b-a,a)) ← (gcd(a,b)=gcd(b%a,a))

    然后就可以发现枚举(b-a)的因子来反求k即可

    代码如下

    
    #include<bits/stdc++.h>
    #include<algorithm>
    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    
    using namespace std;
    
    
    int main()
    {
        long long a,b,aa,bb;
        long long lcm,mainn=9e18,ans_k=0;
        cin>>a>>b;
        if(a>b)swap(a,b);
        long long int c=b-a;
        for(long long i=1;i*i<=c;i++){
                int k1=(int)ceil((double)a/(double)i)*i-a;
                int k2=(int)ceil((double)b/(double)i)*i-b;
                lcm=(a+k2)*(b+k2)/__gcd((a+k2),(b+k2));
                //cout<<lcm<<"fuck_
    ";
                if(lcm<mainn){
                    mainn=lcm;
                    ans_k=k2;
                }
                int ii=c/i;
                k1=(int)ceil((double)a/(double)ii)*ii-a;
                k2=(int)ceil((double)b/(double)ii)*ii-b;
                lcm=(a+k2)*(b+k2)/__gcd((a+k2),(b+k2));
                //cout<<lcm<<"fuck__
    ";
                if(lcm<mainn){
                    mainn=lcm;
                    ans_k=k2;
                }
        }
        cout<<ans_k;
    }
    
  • 相关阅读:
    谷歌脸书第三方登录
    初步了解Owin
    select2去掉搜索框
    angularjs教程——自定义指令
    angularjs教程——Dom操作相关指令详解
    http://172.21.87.57:8081/seeyon/
    nce 1,a puma at large
    股池
    永清环保
    出门需要带的东西
  • 原文地址:https://www.cnblogs.com/--ChenShou--/p/11104683.html
Copyright © 2011-2022 走看看