日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二分查找1

發布時間:2024/9/3 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二分查找1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

zcmu:
1099: 查找元素II
Time Limit: 1 Sec Memory Limit: 128 MB

[Submit][Status][Web Board]
Description

給定一個整數集合s,集合中有n個元素,我有m次詢問,對于每次詢問給定一個整數x,若 x存在于集合s中輸出x found at y,y為集合s按從小到大排序后第一次出現x的下標,否則輸出x not found.

Input

多組測試數據,每組第一行為兩個正整數n,m.(1<=n,m<=1000)代表集合中元素的個數和查詢次數,接下來n行每行有一個正整數代表集合里的元素.(每個整數的大小小于等于100000),接下來 m行每行有一個正整數代表查詢的元素.

Output

詳見sample output

Sample Input

4 1
2
3
5
1
5
5 2
1
3
3
3
1
2
3

Sample Output

CASE# 1:
5 found at 4
CASE# 2:
2 not found
3 found at 3

HINT

Source
//好久前寫的,現在拿出來當總結
Ac_code~:

#include<stdio.h> #include<algorithm> using namespace std; int a[1005],b[1005]; int search2(int aim,int a[],int l)//二分法查找 {int top=0,tail=l-1,z,f=-1;while(top<=tail){z=(tail+top)/2;if(aim<a[z]){tail=z-1;}else if(aim>a[z]){top=z+1;}else{f=z;break;}}return f; } int main() {int n,m,k=0;while(~scanf("%d%d",&n,&m)){k++;int i,j,w;for(i=0; i<n; i++){scanf("%d",&a[i]);}sort(a,a+n);for(j=0; j<m; j++){scanf("%d",&b[j]);}printf("CASE# %d:\n",k);for(i=0; i<m; i++){w=search2(b[i],a,n);//查詢到返回數組下標值,否知返回的為-1if(w==-1) printf("%d not found\n",b[i]);else{for(j=w-1; j>=0; j--){if(a[w]!=a[j]) break;else w=j;}printf("%d found at %d\n",b[i],w+1);}}}return 0; }

總結

以上是生活随笔為你收集整理的二分查找1的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。