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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

nyoj--86--找球号(一)(hashset二分)

發布時間:2024/4/15 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nyoj--86--找球号(一)(hashset二分) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

找球號(一)

時間限制:3000 ms ?|? 內存限制:65535 KB 難度:3 描述
在某一國度里流行著一種游戲。游戲規則為:在一堆球中,每個球上都有一個整數編號i(0<=i&lt;=100000000),編號可重復,現在說一個隨機整數k(0<=k<=100000100),判斷編號為k的球是否在這堆球中(存在為"YES",否則為"NO"),先答出者為勝。現在有一個人想玩玩這個游戲,但他又很懶。他希望你能幫助他取得勝利。 輸入
第一行有兩個整數m,n(0<=n<=100000,0<=m<=1000000);m表示這堆球里有m個球,n表示這個游戲進行n次。
接下來輸入m+n個整數,前m個分別表示這m個球的編號i,后n個分別表示每次游戲中的隨機整數k
輸出
輸出"YES"或"NO"
樣例輸入
6 4 23 34 46 768 343 343 2 4 23 343
樣例輸出
NO NO YES YES


set

常用操作:
1.元素插入:insert()
2.中序遍歷:類似vector遍歷(用迭代器)
3.反向遍歷:利用反向迭代器reverse_iterator。
?? ?例:
?? ?set<int> s;
?? ?......
?? ?set<int>::reverse_iterator rit;
?? ?for(rit=s.rbegin();rit!=s.rend();rit++)
4.元素刪除:與插入一樣,可以高效的刪除,并自動調整使紅黑樹平衡。
?? ??? ??? ?set<int> s;
?? ??? ??? ?s.erase(2);?? ??? ?//刪除鍵值為2的元素
?? ??? ??? ?s.clear();
5.元素檢索:find(),若找到,返回該鍵值迭代器的位置,否則,返回最后一個元素后面一個位置。
?? ??? ??? ?set<int> s;
?? ??? ??? ?set<int>::iterator it;
?? ??? ??? ?it=s.find(5);?? ?//查找鍵值為5的元素
?? ??? ??? ?if(it!=s.end())?? ?//找到
?? ??? ??? ??? ?cout<<*it<<endl;
?? ??? ??? ?else?? ??? ??? ?//未找到
?? ??? ??? ??? ?cout<<"未找到";
6.自定義比較函數
?? ?(1)元素不是結構體:
?? ??? ?例:
?? ??? ?//自定義比較函數myComp,重載“()”操作符
?? ??? ?struct myComp
?? ??? ?{
?? ??? ??? ?bool operator()(const your_type &a,const your_type &b)
?? ??? ??? ?[
?? ??? ??? ??? ?return a.data-b.data>0;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?set<int,myComp>s;
?? ??? ?......
?? ??? ?set<int,myComp>::iterator it;
?? ?(2)如果元素是結構體,可以直接將比較函數寫在結構體內。
?? ??? ?例:
?? ??? ?struct Info
?? ??? ?{
?? ??? ??? ?string name;
?? ??? ??? ?float score;
?? ??? ??? ?//重載“<”操作符,自定義排序規則
?? ??? ??? ?bool operator < (const Info &a) const
?? ??? ??? ?{
?? ??? ??? ??? ?//按score從大到小排列
?? ??? ??? ??? ?return a.score<score;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?set<Info> s;
?? ??? ?......
?? ??? ?set<Info>::iterator it;

//轉載

#include<stdio.h> #include<set> #include<algorithm> using namespace std; int main() {int m,n,a;set<int>s;scanf("%d%d",&m,&n);while(m--){scanf("%d",&a);s.insert(a);}while(n--){scanf("%d",&a);if(s.find(a)!=s.end())printf("YES\n");elseprintf("NO\n");}return 0; }
hash

#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int a[10001000]; int main() {int m,n,x;scanf("%d%d",&m,&n);while(m--){scanf("%d",&x);a[x/32]=1<<x%32;}while(n--){scanf("%d",&x);if(a[x/32]&(1<<x%32))printf("YES\n");elseprintf("NO\n");}return 0; }
二分查找

#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int a[1000100]; int main() {int m,n;scanf("%d%d",&m,&n);for(int i=0;i<m;i++)scanf("%d",&a[i]);sort(a,a+m);while(n--){int mid,k;scanf("%d",&k);int flog=0;int l=0,r=m; while(l<=r){mid=(l+r)/2;if(a[mid]==k){flog=1;break;}else if(k<a[mid])r=mid-1;elsel=mid+1;}if(flog)printf("YES\n");elseprintf("NO\n");}return 0; }


轉載于:https://www.cnblogs.com/playboy307/p/5273737.html

總結

以上是生活随笔為你收集整理的nyoj--86--找球号(一)(hashset二分)的全部內容,希望文章能夠幫你解決所遇到的問題。

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