• 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
  • 相关阅读:
    C标准库函数实现
    每天一句话
    移植数码相框到arm开发板上
    数据管理
    perl 分割文件路径和文件名
    恶补英语 拿 The C programming language 练功
    英语学习 chapter1
    uboot 烧写过程
    MVC,去掉字符串中的html代码
    排序之希尔排序
  • 原文地址:https://www.cnblogs.com/neverchanje/p/3812506.html
Copyright © 2020-2023  润新知