码迷,mamicode.com
首页 > 其他好文 > 详细

STL(pair map set vector priority_queue) poj 3297

时间:2016-05-27 16:51:03      阅读:298      评论:0      收藏:0      [点我收藏+]

标签:

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 }

 

STL(pair map set vector priority_queue) poj 3297

标签:

原文地址:http://www.cnblogs.com/ITUPC/p/5534938.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!