set的使用03(較多的操作函式)
阿新 • • 發佈:2018-12-07
1367: Data Structure
Time Limit: 1 Sec Memory Limit: 128 MB
[Submit][Status][Web Board]
Description
給出一個集合,初始為空,進行N次操作,操作分為三種:
1 往集合中新增一個元素,如果集合中已經存在,則無需重複新增
2 從集合中刪除一個元素,如果集合中不存在該元素,則無需刪除
3 判斷元素在集合中排行老幾(最小的是老大),如果元素不存在請輸出:“sorry”(不含雙引號)
Input
多組測試資料
每組第1行:1個整數N,表示操作的次數。(2<=N<=10000)
第2 - (N+1)行:每行2個整數k和s對應操作的方式和被操作的元素(1<=k<=3,1<=s<=1000000)
Output
對應與每一個操作3,給出相應的結果
Sample Input
8
3 1
2 1
1 1
1 1
1 2
3 2
2 2
3 2
5
1 1
1 100
1 1000000
2 99999
3 1000000
Sample Output
sorry
2
sorry
3
HINT
Source
AC程式碼~:
#include <stdio.h> #include <set> #include <algorithm> using namespace std; set<int>s; int main() { int n; while(~scanf("%d",&n)) { s.clear(); set<int>::iterator it; while(n--) { int x,y; scanf("%d%d",&x,&y); switch(x) { case 1: s.insert(y); break; case 2: if(s.count(y)) s.erase(y); break; case 3: if(s.count(y)) { int c = 0; for(it = s.begin(); it != s.find(y); it++) c++; printf("%d\n",++c); } else printf("sorry\n"); break; } } } return 0; }
總結:
set的迭代器不能執行加減運算,這題case3部分困擾我好久,一直想借助
find.s(y)-s.begin()來解決,但是發現編譯一直報錯,最後查了一下發現set迭代器不能加減法運算。最後我換了中思路瞭解決case3的問題,我本以為會Time exceed limited,沒想到AC了,哈哈哈開心~
總結進入正文~—>:
1. s.clear();//清空容器set 2. set<int>::iterator it;//迭代器,名字叫it,它有點像指標~(功能一樣的) 3. s.insert(x);//將x插入set 4. s.count(y);//判斷set中是否存在y,~~不要寫成(s.cout)~~ 5. s.begin();//叫s的set容器首地址 6. s.erase(x);//在set容器中刪除x 7. s.find(y);//set中找到元素y並返回它的地址