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