我的北大ACM POJ 1002题解

北大acm POJ1002题解c++语言

最近才开始,惭愧啊,这个题花了我好久。

Source Code

Problem: 1002 User: absolute
Memory: 5204K Time: 922MS
Language: C++ Result: Accepted

  • Source Code
    #include <iostream>
    
    #include <map>
    
    #include <string>
    
    using namespace std;
    
    char change[] = {'2','2','2','3','3','3','4','4','4',
    
    '5','5','5','6','6','6','7','Q','7','7','8','8','8','9','9','9','Z'};
    
    
    
    int main()
    
    {
    
    	map<string,int> resultset;
    
    	map<string,int>::iterator iter;
    
    	int line;
    
    	scanf("%d",&line);
    
    	int i;
    
    	for(i=0;i<line;i++)
    
    	{
    
    		char temp[100];
    
    		scanf("%s",temp);
    
    		char afterchange[9];
    
    		int j=0,k=0;
    
    		int length = strlen(temp);
    
    		while(j<length)
    
    		{
    
    			if(k==3)
    
    			{
    
    				afterchange[k++]='-';
    
    			}
    
    			else if(temp[j]<'Z'&&temp[j]>='A')
    
    			{
    
    				afterchange[k++]=change[temp[j++]-'A'];
    
    			}
    
    			else if(temp[j]=='-')
    
    			{
    
    				j++;
    
    			}
    
    			else
    
    			{
    
    				afterchange[k++]=temp[j++];
    
    			}
    
    
    
    		}
    
    		afterchange[k]='\0';
    
    		++resultset[afterchange];
    
    	}
    
    	bool flag = false;
    
    	map<string,int>::iterator end = resultset.end();
    
    	for(iter = resultset.begin(); iter != end; ++iter)
    
    	{
    
    		if(iter->second>1)
    
    		{
    
    			flag = true;
    
    			cout<<iter->first<<" "<<iter->second<<endl;
    
    		}
    
    	}
    
    	if(flag==false)
    
    		cout<<"No duplicates."<<endl;
    
    	return 0;
    
    }

你可能感兴趣的:(ACM)