Loading... [题目链接](http://codeforces.com/problemset/problem/484/B "题目链接") * * * 题目翻译:给定序列$a\_n$,求$a\_i \\% a\_j$的最大值,$1 \\leq i,j \\leq n$且$a\_i>a_j$。 可以先将输入的数据由小到大排序,如果有相同的数据就去重,然后枚举除数,对于一个除数,从它的二倍开始,直到它大于数列中的最大值。 。。。好不通顺。。。看代码吧。 ```cpp #include<bits/stdc++.h> using namespace std; bool cmp(const int& a,const int& b){ return a>b; } struct Solution{ int n,ans,maxn,q; vector<int> a; void Solve(){ scanf("%d",&n); a.resize(n); for(int i=0;i<n;i++){ scanf("%d",&a[i]); maxn=max(maxn,a[i]); } sort(a.begin(),a.end()); n=unique(a.begin(),a.end())-a.begin(); a.resize(n); for(int i=0;i<n;i++){ int k=2*a[i]; while(k<maxn+a[i]){ int x=lower_bound(a.begin(),a.end(),k)-a.begin()-1; if(x==-1){ k+=a[i]; continue; } //printf("k=%d a[%d]=%d a[x] mod a[i]=%d\n",k,x,a[x],a[x]%a[i]); ans=max(ans,a[x]%a[i]); k+=a[i]; } } printf("%d\n",ans); } }; int main(){ Solution().Solve(); return 0; } ``` Last modification:March 8, 2020 © Allow specification reprint Like 如果觉得我的文章对你有用,请随意赞赏