POJ3297+map字符串处理
附数据两组:
ABCCabcaeAAAabcAAAAabcAaBaCa
#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;}