pku3297解题报告

pku3297解题报告

这道题我用的方法很麻烦,使用一个结构体vector保存结果,使用一个map判断是不是一个人报了两个工程.使用set判断一个工程是不是有人重复报名
于是就有了下面的笨拙代码

 1 #include  < string >
 2 #include  < set >
 3 #include  < vector >
 4 #include  < memory.h >
 5 #include  < map >
 6 #include  < algorithm >
 7 using   namespace  std;
 8
 9 struct  Project
10 {
11    string name;
12    int studentcount;
13    Project()
14    {
15        studentcount=0;
16        name.assign("");
17    }

18}
;
19
20 map < string , int >  studentmap;
21 set < string >  studentset;
22 vector < Project >  prov;
23 int  countarray[ 101 ] = {0} ;
24 char  strtemp[ 100 ] = "" ;
25 Project project;
26
27 inline  bool  comp( const  Project  & p1, const  Project  & p2)
28 {
29    return p1.studentcount>p2.studentcount;
30}

31 inline  bool  comp2( const  Project  & p1, const  Project  & p2)
32 {
33    return p1.name.compare(p2.name)<0;
34}

35
36 int  main()
37 {
38    
39    while(true)
40    {
41        int projcount=0;
42        prov.push_back(project);
43        while(true)
44        {
45            gets(strtemp);
46            project.name.assign(strtemp);
47            if(project.name[0]=='1')break;
48            if(project.name[0]=='0')exit(0);
49            if(project.name[0]>='A'&&project.name[0]<='Z')
50            {
51                prov.push_back(project);
52                studentset.clear();
53                projcount++;
54            }

55            if(project.name[0]>='a'&&project.name[0]<='z')
56            {
57                if(studentmap[strtemp]==0)
58                {
59                    studentmap[strtemp]=projcount;
60                }

61                else if(studentmap[strtemp]==-1)
62                {
63                    continue;
64                }

65                else if(studentmap[strtemp]!=projcount)
66                {
67                    prov[studentmap[strtemp]].studentcount--;
68                    studentmap[strtemp]=-1;
69                    continue;
70                }

71                if(studentset.count(strtemp))
72                    continue;
73                else
74                {
75                    studentset.insert(strtemp);
76                    prov[projcount].studentcount++;
77                }

78            }
                        
79        }

80        prov.erase(prov.begin());
81        stable_sort(prov.begin(),prov.end(),comp2);
82        stable_sort(prov.begin(),prov.end(),comp);
83        for(int i=0;i<prov.size();i++)
84        {
85            printf("%s %d\n",prov[i].name.c_str(),prov[i].studentcount);
86        }

87        memset(countarray,0,sizeof(countarray));
88        studentmap.clear();
89        prov.clear();
90        
91    }

92}

93
94

你可能感兴趣的:(pku3297解题报告)