又开始刷水题找自信了==,直接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; }