• STL(pair map set vector priority_queue) poj 3297


    POJ 3297

    算法竞赛初级杂烩包

    题意:学生选课,没个学生只能选一门课。大写字符是课的名字,小写是人名。如果课程后面有多个相同名字算一个,如果一个人选多门课,则他选不上课,输出课和每门课选课人数

    思路:

    map<string,set<int> > stu:一个学生名对应他选了哪几门课

    map<string,ser<int> > pro:课程名对应有几个学生选了他,set存对应的学生

    vector<pair<int,string> > ans:最后结果,课程名对应所选学生人数

    a[]:判断一个学生是否只选了一门课

     1 //#pragma comment(linker, "/STACK:167772160")//手动扩栈~~~~hdu 用c++交
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cstdlib>
     5 #include <iostream>
     6 #include <queue>
     7 #include <stack>
     8 #include <cmath>
     9 #include <set>
    10 #include <utility>
    11 #include <algorithm>
    12 #include <vector>
    13 #include <map>
    14 // #include<malloc.h>
    15 using namespace std;
    16 #define clc(a,b) memset(a,b,sizeof(a))
    17 #define LL long long
    18 const int inf = 0x3f3f3f3f;
    19 const double eps = 1e-5;
    20 const double pi = acos(-1);
    21 const LL MOD = 1e9+7;
    22 // const LL p = 1e9+7;
    23 // inline int r(){
    24 //     int x=0,f=1;char ch=getchar();
    25 //     while(ch>'9'||ch<'0'){if(ch=='-') f=-1;ch=getchar();}
    26 //     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    27 //     return x*f;
    28 // }
    29 map<string,int> stu;
    30 map<string,set<int> > pro;
    31 vector<pair<int,string> > ans;
    32 
    33 int a[10010],n,m;
    34 string str,book;
    35 void init(){
    36     stu.clear();
    37     pro.clear();
    38     ans.clear();
    39     clc(a,0);
    40     n=m=0;
    41 }
    42 
    43 bool cmp(const pair<int,string> &a,const pair<int,string> &b){
    44    if(a.first==b.first) return a.second<b.second;
    45    return a.first>b.first;
    46 }
    47 
    48 void work(){
    49    std::map<string,set<int> >::iterator it;
    50    std::set<int>::iterator q;
    51    for(it=pro.begin();it!=pro.end();it++){
    52       int cnt=0;
    53       for(q=it->second.begin();q!=it->second.end();q++){
    54          if(a[*q]==1) cnt++;
    55       }
    56       ans.push_back(make_pair(cnt,it->first)); 
    57    }
    58    sort(ans.begin(),ans.end(),cmp);
    59    std::vector<pair<int,string> >::iterator p;
    60    for(p=ans.begin();p!=ans.end();p++){
    61       cout<<p->second<<" "<<p->first<<endl;
    62    }
    63 }
    64 
    65 int main(){
    66     // freopen("in.txt","r",stdin);
    67     init();
    68     while(getline(cin,str)){
    69        if(str[0]=='0') break;
    70        else if(str[0]=='1') {
    71           work();
    72           init();
    73           continue;
    74        } 
    75        else{
    76           if(str[0]>='A'&&str[0]<='Z'){
    77              book=str;
    78              pro[book].insert(-1);
    79           }
    80           else{
    81              std::map<string,int>::iterator it = stu.find(str);
    82              if(it==stu.end())
    83                 stu[str]=m++;
    84              std::set<int>::iterator q=pro[book].find(stu[str]);
    85              if(q==pro[book].end()){
    86                  a[stu[str]]++;
    87                  pro[book].insert(stu[str]); 
    88              }
    89           }
    90        }
    91     }
    92     return 0;
    93 }
  • 相关阅读:
    对Spring的简单理解
    对Hibernate的简单认识
    对Struts的简单理解
    浅谈实体类
    xdebug配置
    hosts文件修改完无效的解决办法
    CentOS6.4 中文输入法
    python加密解密
    windows运行命令大全
    vm虚拟机centos文件共享目录设置
  • 原文地址:https://www.cnblogs.com/ITUPC/p/5534938.html
Copyright © 2020-2023  润新知