51nod-1421 最大MOD值

来源:互联网 发布:手机淘宝描述尺寸 编辑:程序博客网 时间:2024/05/20 13:38

原题链接

1421 最大MOD值
题目来源: CodeForces
基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题
 收藏
 关注

有一个a数组,里面有n个整数。现在要从中找到两个数字(可以是同一个) ai,aj ,使得 ai mod aj 最大并且 ai  aj


Input
单组测试数据。第一行包含一个整数n,表示数组a的大小。(1 ≤ n ≤ 2*10^5)第二行有n个用空格分开的整数ai (1 ≤ ai ≤ 10^6)。
Output
输出一个整数代表最大的mod值。
Input示例
33 4 5
Output示例
2

对输入的数排序,遍历每一个数num[i], 分别找到最大的数,满足条件,小于等于, 2*num[i], 3*num[i]..., 然后把该数对num[i]取模

#include <bits/stdc++.h>#define maxn 200005using namespace std;typedef long long ll;int num[maxn];int main(){//freopen("in.txt", "r", stdin);int n, ans = 0;scanf("%d", &n);for(int i = 0; i < n; i++){ scanf("%d", num+i);    }sort(num, num+n);for(int i = 0; i < n; i++){if(num[i] == 1 || (i && num[i] == num[i-1])) continue;int j = num[i] * 2;while(j <= num[n-1]){int d = lower_bound(num, num+n, j) - num;ans = max(ans, num[d-1] % num[i]);   j += num[i];}ans = max(ans, num[n-1] % num[i]);}printf("%d\n", ans);return 0;}



0 0
原创粉丝点击