• 洛谷P1372 又是毕业季I(数论做法+二分做法)


    洛谷地址:https://www.luogu.com.cn/problem/P1372

    题意:

    简单来讲,就是在1~n中,找k个使得它们的gcd最大

    解析:

    一数学分析:

    假设第一个为x

    那么有2x,3x,4x,....kx

    kx<=n

    则:x<=n/k

    n/k即为答案

    #include<bits/stdc++.h>
    #include<map>
    #include<iostream>
    #include<cstring>
    #include<cmath>
    using namespace std;
    typedef long long ll;
    const int maxn=2e3+10;
    const int maxn2=20;
    int mp[maxn][maxn];
    int answ[maxn];
    int md[maxn];
    int main()
    {
        ll n,k;
        cin>>n>>k;
        cout<<n/k<<endl;
    }

    二:二分做法

    还是之前的寻找方法,x,2x,3x...kx,二分mid,mid*k与n进行比较来调整L,R

    又把二分写死了。。。。

    跳出条件:L+1<R

    就拿6,3来讲,不这么搞,会死在[1,2]中跳不出来

    #include<bits/stdc++.h>
    #include<map>
    #include<iostream>
    #include<cstring>
    #include<cmath>
    using namespace std;
    typedef long long ll;
    const int maxn=2e3+10;
    const int maxn2=20;
    int mp[maxn][maxn];
    int answ[maxn];
    int md[maxn];
    int main()
    {
        ll n,k;
        cin>>n>>k;
        ll l=1,r=n;
        while(l+1<r)
        {
        //    cout<<l<<" "<<r<<endl;
            ll md=(l+r)>>1;
            if(md*k>n)
                r=md-1;
            else
                l=md;
        }
        if((l+1)*k<=n)
            cout<<l+1<<endl;
        else
            cout<<l<<endl;
    }
  • 相关阅读:
    2-SAT( tarjan应用 )
    字节流和字符流
    linux 安装kafka
    网络编程入门
    Java代码中的魔法值
    动态SQL
    update语句的返回值是什么
    dual表
    diy diy diy台式机走起
    js数组赋值,改变其中一个,另一个数组也会改变(vue中数据绑定)
  • 原文地址:https://www.cnblogs.com/liyexin/p/13525008.html
Copyright © 2020-2023  润新知