首页 > 代码库 > Multiset的使用 TOJ 2196.Nuanran's Idol II 与 UVA11136 Hoax or what

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 0Xfffffffff17 #define st_size (1<<18)-118 #define maxn19 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