POJ3297+map字符串处理

附数据两组:

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;
}


你可能感兴趣的:(POJ3297+map字符串处理)