牛客小白月賽6
阿新 • • 發佈:2019-02-02
HA實驗有一套非常嚴密的安全保障體系,在HA實驗基地的大門,有一個指紋鎖。
該指紋鎖的加密演算法會把一個指紋轉化為一個不超過1e7的數字,兩個指紋數值之差越小,就說明兩個指紋越相似,當兩個指紋的數值差≤k時,這兩個指紋的持有者會被系統判定為同一個人。
現在有3種操作,共m個,
操作1:add x,表示為指紋鎖錄入一個指紋,該指紋對應的數字為x,如果系統內有一個與x相差≤k的指紋,則系統會忽略這次新增操作
操作2:del x,表示刪除指紋鎖中的指紋x,若指紋鎖中多個與x相差≤k的指紋,則全部刪除,若指紋鎖中沒有指紋x,則可以忽略該操作,
操作3:query x,表示有一個持有指紋x的人試圖開啟指紋鎖,你需要設計一個判斷程式,返回該人是否可以開啟指紋鎖(只要x與存入的任何一個指紋相差≤k即可開啟鎖)。
初始狀態,指紋鎖中沒有任何指紋。
輸入描述:
第一行有2個正整數m,k。
接下來m行,每行描述一種操作:add x,del x或query x。
輸出描述:
對於每個query操作,輸出一行,包含一個單詞“Yes”或“No”,表示該人是否可以開啟指紋鎖。
示例1
輸入
4 3
add 1
add 10
query 5
query 4
輸出
No
Yes
示例2
輸入
4 3
add 1
query 4
del 1
query 4
輸出
Yes
No
示例3
輸入
6 3
add 10
query 10
add 5
query 5
del 7 //系統將指紋10和指紋5全部刪除
query 8
輸出
Yes
Yes
No
備註:
對於100%的測試資料:
1 ≤ k,m ≤ 1000000
資料量較大,注意使用更快的輸入輸出方式。
思路:直接上set,對自動排序處理一下即可.......唉。
程式碼如下:
#include<bits/stdc++.h> using namespace std; int m,k; struct cmp { bool operator() (int a,int b) { if(abs(a-b)<=k) return false; return a<b; } }; set<int,cmp>s; int main() { scanf("%d%d",&m,&k); int x; char op[8]; while(m--) { scanf("%s%d",op,&x); if(op[0]=='a') { if(s.find(x)==s.end()) { s.insert(x); } } else if(op[0]=='d') { s.erase(x); } else { if(s.find(x)!=s.end()) printf("Yes\n"); else printf("No\n"); } } return 0; }