又开始刷水题找自信了==,直接O(NM)暴力。
#include<iostream>
#include<stdio.h>
#include<cstdio>
#include<stdlib.h>
#include<vector>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<stack>
#include<queue>
#include<ctype.h>
#include<map>
#include<time.h>
#include<bitset>
using namespace std;
//hdu 5131
const int maxn=210;
int N;
int M;
pair<string,int>s[maxn];
string q[maxn];
bool cmp(pair<string,int>a, pair<string,int>b)
{
if(a.second==b.second)
{
return a.first<b.first;
}
else
{
return a.second>b.second;
}
}
int main()
{
freopen("input.txt","r",stdin);
//freopen("data.txt","r",stdin);
//freopen("out1.txt","w",stdout);
while(true)
{
scanf("%d",&N);
if(N==0)
{
break;
}
for(int i=0;i<N;i++)
{
cin>>s[i].first>>s[i].second;
}
scanf("%d",&M);
for(int i=0;i<M;i++)
{
cin>>q[i];
}
sort(s,s+N,cmp);
for(int i=0;i<N;i++)
{
cout<<s[i].first<<" "<<s[i].second<<endl;
}
for(int i=0;i<M;i++)
{
pair<string,int>tmp;
for(int j=0;j<M;j++)
{
if(s[j].first==q[i])
{
tmp=s[j];
break;
}
}
int cntmaj=1;
int cntmin=1;
for(int j=0;j<N;j++)
{
if(tmp.second<s[j].second)
{
cntmaj++;
}
if(tmp.second==s[j].second&&s[j].first<tmp.first)
{
cntmin++;
}
}
if(cntmin==1)
{
printf("%d\n",cntmaj);
}
else
{
printf("%d %d\n",cntmaj,cntmin);
}
}
}
return 0;
}