51nod 1421 最大MOD值

Posted 7391_KID

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51nod 1421 最大MOD值相关的知识,希望对你有一定的参考价值。

分析:首先去重排序,然后枚举a[i]的倍数,找到最大的a[j],使得a[j]小于a[i]的倍数,用二分法找,然后更新一下最大值。枚举a[i]和倍数复杂度为O(nlogn),二分O(logn),总的为O(n(logn)^2)。

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 using namespace std;
 5 const int maxn=200005;
 6 int a[maxn],n;
 7 bool have[5*maxn];
 8 inline int Dich(int t,int l){
 9     if(a[n-1]<=t)return a[n-1];
10     if(a[l]>t)return a[l-1];
11     int r=n-1,m=(r+l)/2;
12     while(l<r&&l!=m){
13         if(a[m]==t)return a[m];
14         if(a[m]>t)r=m;
15         else l=m;
16         m=(l+r)/2;
17     }
18     return a[m];
19 }
20 int main(){
21     cin>>n;
22     int v;
23     memset(have,0,sizeof(have));
24     for(int i=0;i<n;i++){
25         cin>>v;
26         if(have[v]){
27             n--;i--;
28             continue;
29         }
30         a[i]=v;
31         have[v]=true;
32     }
33     sort(a,a+n);
34     int ans=0;
35     for(int i=0;i<n;i++){
36         int t=a[i]*2;
37         do{
38             int k=Dich(t-1,i+1)%a[i];
39             if(k>ans)ans=k;
40         }while((t+=a[i])<=a[n-1]);
41     }
42     cout<<ans<<endl;
43     return 0;
44 }

 

以上是关于51nod 1421 最大MOD值的主要内容,如果未能解决你的问题,请参考以下文章

51nod 1421 最大MOD值

1421 最大MOD值

51Nod 1004 n^n的末位数字(日常复习快速幂,莫名的有毒,卡mod值)

51Nod1039 N^3 Mod P 数论 原根 BSGS

51Nod 1046 A^B Mod C Label:快速幂

51nod1123 X^A Mod B (任意模数的K次剩余)