郑州大学ZZUOJ-4404-ICPC网络赛
题目描述
2019年度,我校参加网络赛取得了优异的成绩:
ICPC网络赛会根据最终学校的排名确定晋级现场赛的学校。ICPC网络赛中,每个学校都会报名若干个队伍参加,每个学校的最终排名是由该校最高名次的队伍决定的。对于同一所学校,除了名次最高的队伍,其余队伍将不计入排名。现在给你一场比赛的榜单,请你帮忙求出某个学校的最终学校排名。特别地,网络赛中也会有个别的退役大佬想再重温下ICPC,他们有个特殊的地方就是队名前会出现“*”(不包括引号),这种打星队伍是不能代表学校参与排名的。
刚刚结束完一场网络赛后,W老师想知道某个学校的排名情况,请你帮忙。
输入
第一行一个整数N(1<N≤10,000),表示参加网络赛的队伍数量
从第二行到第N+1行,每行两个字符串s,t(s,t的长度均小于等于50)。第i+1行的两个字符串分别表示排名第i的学校名称和队伍ID。(注意:学校名称和队伍ID中不会出现空格)
最后一行一个字符串,表示想查询排名的学校名称。若此学校无正式排名,输出-1。
(本题中出现的所有字符串仅由大小写字母,阿拉伯数字以及下划线 “_” 和星号 “*” 组成)
输出
待查询学校的排名
样例输入
8
Tsinghua_University PowerofTwo
Tsinghua_University *RanodmStrign
Peking_University *FaFata
Tsinghua_University BurningComplier
ShanghaiJiaoTong_University sjtu
Zhejiang_University Helianthus
Peking_University pkuteam2
Zhengzhou_University LogWhen
Peking_University
样例输出
4
#include<bits/stdc++.h> //万能头文件
using namespace std;
int main()
{
int n,j;
set<string> q; //定义set容器
cin>>n;
string str[10005],name[10005],name1; //定义学校名,队名,待查询学校名
for(int i=0;i<n;i++){
cin>>str[i];cin>>name[i];} //读入数据
cin>>name1;
j=0;
while(1)
{
if(name[j][0]=='*'&&j<n) //如果检测到'*',跳过
j++;
else if(str[j]!=name1&&j<n) //如果没检测到'*',set容器中读入数据
{
q.insert(str[j]);
j++;
}
else break;
}
if(j==n)cout<<-1; //若此学校无正式排名,输出-1
else cout<<q.size()+1; //输出容器内元素个数,排名为元素个数-1
}