codeforces 484B

题意:给出一个数列a, 让你求ai mod aj 的最大值,且ai>aj

思路:枚举+二分、 枚举每一个数的倍数,要使得结果最大肯定要找到小于这个倍数的最大值,这一注意最后要加的那一句代码、

#include
#include
#include
#include
using namespace std;
const int qq = 200000+10;
int num[qq];
int main(){
	int n;scanf("%d",&n);
	for(int i=0; i=num[i])	break;
		int tmp = 2*num[i];
		do{
			int id = lower_bound(num, num+n, tmp)-num;
			id = id-1;
			ans = max(ans, num[id]%num[i]);
			tmp+=num[i];	
		}while(tmp<=num[n-1]);
		ans = max(ans, num[n-1]%num[i]);	//一定得加这一句,不然这个情况可能遍历不到、 
	}
	//printf("%d\n", *(lower_bound(num, num+n, 9)-1));
	printf("%d\n", ans);
	return 0;
}



你可能感兴趣的:(数学方面)