[挑战程序设计]二分搜索
2017-08-21 19:36
120 查看
第一个抽签的问题,判断从口袋放回的拿出n个数,和是否可能为m。
一、可以写四重循环。
但是当n的范围1<=n<=1000时,时间复杂度太高,考虑
二、二分搜索与O(n^3logn)
在[first,last)中查找value,如果找到返回Ture,否则返回False。
还有一个:
equal_range是C++ STL中的一种二分查找的算法,试图在已排序的[first,last)中寻找value,它返回一对迭代器i和j,其中i是在不破坏次序的前提下,value可插入的第一个位置(亦即lower_bound),j则是在不破坏次序的前提下,value可插入的最后一个位置(亦即upper_bound),因此,[i,j)内的每个元素都等同于value,而且[i,j)是[first,last)之中符合此一性质的最大子区间
三、O(n^2logn)算法
kc+kd=m-ka-kb。
这种情况不能使用二分搜索,但如果先枚举出Kc+Kd的n^2个数字并排好序。
一、可以写四重循环。
但是当n的范围1<=n<=1000时,时间复杂度太高,考虑
二、二分搜索与O(n^3logn)
int n,m,k[MAX_N]; bool binary_search(int x){ int l=0,r=n; while(r-l>=1){ int i=(l+r)/2; if(k[i]==x) return true; else if(k[i]<x) l=i+1; else r=i; } } void solve(){ sort(k,k+n); bool f=false; for(int a=0;a<n;a++){ for(int b=0;b<n;b++){ for(int c=0;c<n;c++){ if(binary_search(m-k[a]-k[b]-k[c])){ f=true; } } } } if(f) puts("Yes"); else puts("No"); }STL中的binary_search: bool binary_search(ForwardIterator first, ForwardIteratorlast, const T& value, StrictWeakOrdering comp);
在[first,last)中查找value,如果找到返回Ture,否则返回False。
还有一个:
equal_range是C++ STL中的一种二分查找的算法,试图在已排序的[first,last)中寻找value,它返回一对迭代器i和j,其中i是在不破坏次序的前提下,value可插入的第一个位置(亦即lower_bound),j则是在不破坏次序的前提下,value可插入的最后一个位置(亦即upper_bound),因此,[i,j)内的每个元素都等同于value,而且[i,j)是[first,last)之中符合此一性质的最大子区间
三、O(n^2logn)算法
kc+kd=m-ka-kb。
这种情况不能使用二分搜索,但如果先枚举出Kc+Kd的n^2个数字并排好序。
int n,m,k[MAX_N]; int kk[MAX_N*MAX_N]; bool binary_search(int x){ int l=0,r=n*n; while(r-l>=1){ int i=(l+r)/2; if(kk[i]==x) return i+1; else if(kk[i]<x) l=i+1; else r=i; } return false; } void solve() { for(int c=0;c<n;c++){ for(int d=0;d<n;d++){ kk[c*n+d]=k[c]+k[d]; } } sort(kk,kk+n*n); bool f=false; for(int a=0;a<n;a++){ for(int b=0;b<n;b++){ if(binary_search(m-k[a]-k[b]))f=true; } } if(f) puts("Yes"); else puts("No"); }
相关文章推荐
- poj2456 二分搜索 <挑战程序设计竞赛>
- 挑战程序设计竞赛 3.1 不光是查找值!“二分搜索”
- poj1064 二分搜索 挑战程序设计竞赛
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 Problem E: qwb和李主席(折半搜索+类二分枚举)
- poj3050 穷竭搜索 <挑战程序设计竞赛>
- 折半枚举(双向搜索)挑战程序设计竞赛
- 挑战程序设计竞赛:深度优先搜索
- 挑战程序设计竞赛里面的几道深度优先搜索
- 挑战程序设计竞赛 2.1 最基础的“穷竭搜索”
- 挑战 3.1 不光是查找值!”二分搜索“ Dropping tests
- 二分搜索及其思想(挑战例题总结)
- poj3187 穷竭搜索 <挑战程序设计大赛>
- 二分搜索
- Java 二分搜索
- 51Nod-1010 只包含因子2 3 5的数【打表+排序+二分搜索】
- 二分图判定 (挑战程序设计竞赛)
- 查找算法之二分搜索
- 挑战程序设计初级篇例题
- 基于二分搜索的插入排序
- uvalive 3635 - Pie(二分搜索)