蓝桥杯备赛--二分查找

Posted As_zyh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯备赛--二分查找相关的知识,希望对你有一定的参考价值。

算法训练-找数2
题目地址 http://lx.lanqiao.cn/problem.page?gpid=T1666

【问题描述】在一个小到大的有序序列中(不存在重复数字),查找某个数所在的位置。如果该数不在该数列中,输出其应插入点的位置。

#include<cstdio>

int a[10100];
int N;

int bin_search(int x) 
	int l = 0, r = N-1, res = 0;
	while(l <= r) 		
		int mid = l + r >> 1;
		if(a[mid] < x) 
			l = mid + 1;res = mid;
		 else 
			r = mid - 1;
		
	
	return res;


int main() 
	scanf("%d", &N);
	for(int i = 0; i < N; i++) 
		scanf("%d", &a[i]);
	
	int x, idx;
	scanf("%d", &x);
	idx = bin_search(x);
	if(idx == 0 && a[idx] > x || a[idx] == x) 
		printf("%d\\n", idx+1); //从1开始数,故+1,要么找到这个数,要么插入第一个(这个数最小) 
	 else 
		printf("%d\\n", idx+2); //插入在这个数后面 
	
	return 0;
 

算法训练 搬走要石
题目地址http://lx.lanqiao.cn/problem.page?gpid=T2400

问题描述
  住在有顶天的天人Tensi对自己的住处很不满。终于有一天她决定把门前碍眼的要石通通丢掉(怒扔要石)。控制要石自然是很容易的事,不过也会消耗灵力。假设搬走一块质量为1的要石会消耗1点灵力,而且由于要石都是连着放置的缘故所以每次除了搬走一颗,也可以搬走连续的任意数量的要石,自然质量是算在一起的。现在Tensi准备最多使用M次灵力,但是她太懒……所以每次只会使用同量的灵力, 也因为她太烂,所以也不愿意多花一点灵力……现在很懒的Tensi需要你帮她计算最少一次需要消耗多少灵力,能够在M次内把所有要石都丢到人间去……
  

#include<cstdio>

int M, N; 
int a[1010];

int enough(int t) 
	int idx = 0;
	for(int i = 0; i < M; i++) 
		int sum = 0;
		while(sum + a[idx] <= t && idx <= N-1) 
			sum += a[idx];
			idx++;
		;
	
	if(idx == N) return 1;
	return 0;


int bin_search() 
	int l = 0, r = 1000000, res = 1000000;
	while(l <= r) 
		int mid = l + r >> 1;
		//printf("%d %d %d\\n", l, mid, r);
		if(!enough(mid)) 
			l = mid + 1;
		 else 
			r = mid - 1;
			res = mid;
		
	
	return res;


int main() 
	scanf("%d%d", &N, &M);
	for(int i = 0; i < N; i++) 
		scanf("%d", &a[i]);
	
	int res = bin_search();
	printf("%d\\n", res);
	return 0;

以上是关于蓝桥杯备赛--二分查找的主要内容,如果未能解决你的问题,请参考以下文章

蓝桥杯备赛刷题

蓝桥杯备赛刷题

蓝桥杯备赛--教你用矩阵优化递推

蓝桥杯备赛--教你用矩阵优化递推

蓝桥杯备赛(第十届(1) )

蓝桥杯备赛|成绩统计|排列字母|纸张尺寸