zoukankan      html  css  js  c++  java
  • Codeforces 484B Maximum Value(排序+二分)

    题目链接:

             http://codeforces.com/problemset/problem/484/B

    题意:

            求a[i]%a[j] (a[i]>a[j])的余数的最大值

    分析:

           要求余数的最大值非常明显a[i]越接近a[j]的倍数则余数越大 ,因此我们将全部的元素从大到小排序 ;

     然后枚举a[j]的倍数 ,二分查找小于a[i]倍数的最大值,然后更新余数的最大值。

    代码例如以下:

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    
    int a[200010];
    
    inline int mymax(int a,int b){
        return a > b? a: b;
    }
    
    
    inline int bin_search(int l,int r,int val)//二分查找小于val的最大值
    {
        int mid;
        while(l<=r){
            mid=(l+r)>>1;
            if(a[mid]==val) return mid-1;
            else if(a[mid]>val) r=mid-1;
            else l=mid+1;
        }
        return r;
    }
    
    int main()
    {
        int n;
        while(~scanf("%d",&n)){
            for(int i=0;i<n;i++)
                scanf("%d",&a[i]);
            sort(a,a+n);
            int mmax = 0;
            for(int i=0;i<n-1;i++){
                if(a[i]==0||a[i]!=a[i-1]){//剪枝。假设之前出现过了就不用查了;
                int tmp=a[i]+a[i];
                while(tmp<=a[n-1]){
                    int pos=bin_search(0,n-1,tmp);
                    mmax = mymax(mmax,a[pos]%a[i]);
                    tmp+=a[i];
                }
                mmax =mymax(mmax,a[n-1]%a[i]);
                }
            }
            printf("%d
    ",mmax);
        }
        return 0;
    }
    



  • 相关阅读:
    python爬虫
    绕过CDN查找网站真实IP方法收集
    拖库
    伪静态注入的总结
    国外安全网站信息收集
    python字典去重脚本
    AOP 的利器:ASM 3.0 介绍
    JDK工具
    JVM性能调优监控工具
    DMZ
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4552743.html
Copyright © 2011-2022 走看看