Multiset的使用 TOJ 2196.Nuanran's Idol II 与 UVA11136 Hoax or what

 1 /*
 2 ID: neverchanje
 3 PROG: TOJ2195
 4 LANG: C++11
 5 */
 6 #include<iostream>
 7 #include<set>
 8 using namespace std;
 9 
10 char cmd;
11 int n,val;
12 int main(){
13 //    freopen("a.txt","r",stdin);
14 //    freopen(".out","w",stdout);
15     while(cin>>n){
16         if(!n) break;
17         multiset<int> s;
18         while(n--){
19             cin>>cmd;
20             if(cmd=='B'){
21                 cin>>val;
22                 s.insert(val);
23             }
24             else{//cmd=='G'
25                 int y=*s.begin();
26                 cout<<y<<endl;
27                 s.erase(s.begin());
28             }
29         }
30     }
31      return 0;
32 }
33 
34 /*
35 DESCRIPTION:
36 multiset可以支持重复元素,使得删除操作有两种情况
37 s.erase(s.begin())是只删除一个最小元素(即最小元素有多个时,仍只删除一个)
38 s.erase(*s.begin())会删除最小元素及相同项
39 */

 

uva11136 因为uva的数据貌似有问题,所以没过(其他人的Ac代码也wa了),但这份代码没问题

 1 /*
 2 ID: neverchanje
 3 PROG:
 4 LANG: C++11
 5 */
 6 #include<vector>
 7 #include<iostream>
 8 #include<cstring>
 9 #include<string>
10 #include<algorithm>
11 #include<cmath>
12 #include<cstdio>
13 #include<set>
14 #include<queue>
15 #include<map>
16 #define INF 0Xfffffffff
17 #define st_size (1<<18)-1
18 #define maxn
19 typedef  long long ll;
20 using namespace std;
21 
22 int n,m,x;
23 multiset<int> s;
24 int main(){
25 //    freopen("a.txt","r",stdin);
26 //    freopen(".out","w",stdout);
27     while(cin>>n)
28     {
29         if(!n) break;
30         s.clear();
31         int sum=0;
32 
33         for(int j=0;j<n;j++){
34             cin>>m;
35             for(int i=0;i<m;i++){    
36                 cin>>x;
37                 s.insert(x);
38             }
39             sum+=*--s.end()-*s.begin();
40             s.erase(--s.end());
41             s.erase(s.begin());
42         }
43         cout<<sum<<endl;
44     }
45     return 0;
46 }
47 
48 /*
49 DESCRIPTION:
50 
51 */
View Code

 

posted @ 2014-06-27 17:59  neverchanje  阅读(190)  评论(0编辑  收藏  举报