zoukankan      html  css  js  c++  java
  • 洛谷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;
    }
  • 相关阅读:
    查看mongodb的状态
    superset----缓存之redis
    superset--presto sql
    linux----之tcpdump小用
    Git版本回退的最佳方式
    SpringBoot 热部署
    不使用Tomcat,手写简单的web服务
    Spring Security 入门
    Maven总结
    git高级用法
  • 原文地址:https://www.cnblogs.com/liyexin/p/13525008.html
Copyright © 2011-2022 走看看