codeforces 484 B Maximum Value 排序+二分 + 数学
来源:互联网 发布:淘宝韩版情侣装学生 编辑:程序博客网 时间:2024/05/15 07:01
链接:http://codeforces.com/contest/484/problem/B
题意:给定长度为n的序列,要求序列中 ai % aj 最大的值是多少。
思路:
给定的n为
首先可以明确,aj如果越大的话,那么取模后的值就可能越大,因为取模后只能在0~aj -1 这些数之中了。
又因为在这道题中,序列的顺序并没有用,所以考虑进行排序,从小到大,然后从大的开始取。
对于同一个aj的话要使取模后的数尽可能的大的话,ai应该是出现在小于aj的某个倍数的第一个数。那么我们就可以在序列中二分查找大于等于 aj k倍的数,以及小于k+1 倍 的第一个数。(查找k倍,防止少了模为0的情况)
确定算法,从大到小枚举序列中的元素,从一倍开始,每次都二分查找。如果已经在这个序列中找不到大于等于 k * aj 的数,那么就停止,枚举下一个元素。但是发现这样可能会超时,因为如果这个序列中只有很少的元素,但是这些数直接差距非常大,比如1 100000 ,那么这样枚举倍数的话就一定会枚举到100000上,但是会发现从2~100000找到的都是100000这个数,都是重复的。
所以考虑直接用迭代这个倍数,如果找到第一个大于等于k*aj的数 ap,那么将 j 变为ap/aj + 1,防止下次又找到ap这个数。
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define M 1000009#define INF 0x3f3f3f3fint a[M];int n;int main(){ //freopen("in.txt","r",stdin); while(scanf("%d",&n)==1) { for(int i = 0;i< n;i++) scanf("%d",&a[i]); sort(a,a+n); int ans = -INF; for(int i = n-1;i >= 0;i--) { for(int j = 1;;) { int p = lower_bound(a+i,a+n,j*a[i]) - a; int q = lower_bound(a+i,a+n,(j+1)*a[i]) - a - 1; if(p == n) break; ans = max(a[p]%a[i],ans); ans = max(a[q]%a[i],ans); j = a[p] / a[i] + 1; //直接迭代到有用的倍数上,避免出现 1 1000 这样无用循环太多的情况 } if(ans > a[i]) break; } printf("%d\n",ans); } return 0;}
0 0
- codeforces 484 B Maximum Value 排序+二分 + 数学
- Codeforces 484B Maximum Value(排序+二分)
- Codeforces 484B Maximum Value(高效+二分)
- Codeforces 484B. Maximum Value(高效二分搜索)
- codeforces #484B# Maximum Value(二分lower_bound)
- CodeForces 484B Maximum Value
- Codeforces 484B Maximum Value
- cf#276-B - Maximum Value- (数学+暴力)/(二分)
- Maximum Value - CodeForces 484 B 水题
- [杂题] Codeforces #484B. Maximum Value
- 51NOD 1421 最大MOD值&&Codeforces 484 B. Maximum Value(筛法 + 二分)
- Codeforces 484B Maximum Value——思维
- B. Maximum Value(Codeforces Round #276(div1)
- codeforces#321 B(排序+二分)
- Codeforces Round #276 (Div. 1) B. Maximum Value
- Codeforces Round #276 (Div. 1) B. Maximum Value
- Codeforces Round #276 (Div. 1) B. Maximum Value(哈兮)
- Codeforces Round #276 (Div. 1) B. Maximum Value(数论)
- mybatis3.2.8 与 hibernate4.3.6 混用
- POJ 2676 Sudoku
- 关于数据库删除时,未找到搜索关键词的问题
- 思维导图案例之VeritasDCG
- tableview 在重用时如何避免内容重复
- codeforces 484 B Maximum Value 排序+二分 + 数学
- iOS学习笔记21-当工程中提示#import <libxml/parser.h>不存在时,只需要两部操作即可
- 命令行和文件的操作
- JAVA程序员成长之路的总结
- Spring源码阅读总结(Ing)
- 关于LINUX权限(启动tomcat)-bash: ./startup.sh: Permission denied
- Jqgrid 鼠标旋停显示框实现
- 高仿美团(全)
- 11.Xcode中实时监测网络状态