附数据两组:
ABCC abc ae AAA abc AAAA abc A a B a C a
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<iostream>
#include<queue>
#include<map>
#include<stack>
#include<set>
#include<math.h>
using namespace std;
typedef long long int64;
//typedef __int64 int64;
typedef pair<int64,int64> PII;
#define MP(a,b) make_pair((a),(b))
const int maxn = 105;
const int maxm = 1005;
const int inf = 0x7fffffff;
const double pi=acos(-1.0);
const double eps = 1e-8;
struct Node{
string name;
int cnt;
}project[ maxn ];
map<string,int>mp;
map<string,int>special;
void init(){
mp.clear();
special.clear();
}
int cmp( Node a,Node b ){
if( a.cnt!=b.cnt )
return a.cnt>b.cnt;
else
return a.name<b.name;
}
int main(){
string temp;
while( getline( cin,temp ) ){
//cout<<"temp = "<<temp<<endl;
if( '0'==temp[0] )
break;
if( '1'==temp[0] )
continue;
init();
int Num = 1;
while( 1 ){
project[ Num ].name = temp;
project[ Num ].cnt = 0;
while( 1 ){
getline( cin,temp );
//cout<<"temp = "<<temp<<endl;
if( temp.size()==1&&temp[0]=='1' ) break;
if( ( temp[0]>='a'&&temp[0]<='z' )||( temp[0]>='0'&&temp[0]<='9' ) ){
if( mp[ temp ]==0 ){
mp[ temp ] = Num;
project[ Num ].cnt ++ ;
}
else {
if( mp[ temp ]==Num ){}
else if( special[ temp ]==0 ){
special[ temp ] = 1;
if( project[ mp[temp] ].cnt>0 )
project[ mp[ temp ] ].cnt --;
}
}
}
else
break;
}
Num ++ ;
if( '1'==temp[0] ) break;
}
//cout<<"ok"<<endl;
sort( project+1,project+Num,cmp );
for( int i=1;i<Num;i++ ){
cout<<project[i].name<<" "<<project[i].cnt<<endl;
}
}
return 0;
}