| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1078 人关注过本帖
标题:487-3279问题
只看楼主 加入收藏
lqsh
Rank: 2
来 自:山东济南
等 级:论坛游民
帖 子:26
专家分:58
注 册:2011-8-29
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
487-3279问题


   
 
 
Online Judge Problem Set Authors Online Contests User
Web Board
Home Page
F.A.Qs
Statistical Charts Problems
Submit Problem
Online Status
Prob.ID: Register
Update your info
Authors ranklist
 Current Contest
Past Contests
Scheduled Contests
Award Contest lqsh      Log Out
Mail:0(0)
Login Log      Archive
Language:Default简体中文487-3279
Time Limit: 2000MS  Memory Limit: 65536K
Total Submissions: 168427  Accepted: 28795

Description

企业喜欢用容易被记住的电话号码。让电话号码容易被记住的一个办法是将它写成一个容易记住的单词或者短语。例如,你需要给滑铁卢大学打电话时,可以拨打TUT-GLOP。有时,只将电话号码中部分数字拼写成单词。当你晚上回到酒店,可以通过拨打310-GINO来向Gino's订一份pizza。让电话号码容易被记住的另一个办法是以一种好记的方式对号码的数字进行分组。通过拨打必胜客的“三个十”号码3-10-10-10,你可以从他们那里订pizza。

电话号码的标准格式是七位十进制数,并在第三、第四位数字之间有一个连接符。电话拨号盘提供了从字母到数字的映射,映射关系如下:
A, B, 和C 映射到 2
D, E, 和F 映射到 3
G, H, 和I 映射到 4
J, K, 和L 映射到 5
M, N, 和O 映射到 6
P, R, 和S 映射到 7
T, U, 和V 映射到 8
W, X, 和Y 映射到 9

Q和Z没有映射到任何数字,连字符不需要拨号,可以任意添加和删除。 TUT-GLOP的标准格式是888-4567,310-GINO的标准格式是310-4466,3-10-10-10的标准格式是310-1010。

如果两个号码有相同的标准格式,那么他们就是等同的(相同的拨号)

你的公司正在为本地的公司编写一个电话号码薄。作为质量控制的一部分,你想要检查是否有两个和多个公司拥有相同的电话号码。

Input

输入的格式是,第一行是一个正整数,指定电话号码薄中号码的数量(最多100000)。余下的每行是一个电话号码。每个电话号码由数字,大写字母(除了Q和Z)以及连接符组成。每个电话号码中只会刚好有7个数字或者字母。
Output

对于每个出现重复的号码产生一行输出,输出是号码的标准格式紧跟一个空格然后是它的重复次数。如果存在多个重复的号码,则按照号码的字典升序输出。如果输入数据中没有重复的号码,输出一行:
No duplicates.

Sample Input

12
4873279
ITS-EASY
888-4567
3-10-10-10
888-GLOP
TUT-GLOP
967-11-11
310-GINO
F101010
888-1200
-4-8-7-3-2-7-9-
487-3279

Sample Output

310-1010 2
487-3279 4
888-4567 3
Source

East Central North America 1999
Translator

北京大学程序设计实习2007
#include <iostream>
#include <map>
#include <string>
#include <algorithm>
#include <ctype.h>
#include <vector>
using namespace std;
class Phone
{
private:
    map<char,char>m_;
    //string s_;
    vector<string>vec;
public:
    Phone()
    {
    //    map<char,char>m_;
        //s_="";
        /*
        char temp='1';
        for(char a='A';a!='Z'+1;a+=3)
        {
            int i=0;
            if(a=='Q')
            {
                a+=1;
            }
            for(;i<3;i++)
            {
                m_[a+i]=temp;
            }
            temp++;
            
        }*/
        m_['A']=m_['B']=m_['C']='2';
        m_['D']=m_['E']=m_['F']='3';
        m_['G']=m_['H']=m_['I']='4';
        m_['J']=m_['K']=m_['L']='5';
        m_['M']=m_['N']=m_['O']='6';
        m_['P']=m_['R']=m_['S']='7';
        m_['T']=m_['U']=m_['V']='8';
        m_['W']=m_['X']=m_['Y']='9';
/*
     map<char ,char>::iterator it;
     for(it=m_.begin();it!=m_.end();it++)
     {
         cout<<(*it).first<<":"<<(*it).second<<endl;
     }
     */
        
    }
    void mapping(const char *cs)
    {
    //    char phone_[9]={0};
        string s;
        int j=0;
        const char *c;
        c=cs;
        while(*c)
        {
            if((*c)>='A'&&(*c)<='Z')
            {
                //phone_[j++]=m_[*c];
                s=s+m_[*c];
                j++;

            }
            if(isdigit(*c))
            {
            //    phone_[j++]=*c;
                s=s+*c;
                j++;

            }
            if(j==3)
            {
            //    phone_[j++]='-';
                    s=s+'-';
                j++;
            }
            c++;

        }
    //    phone_[8]=0;
    //    vec.insert(vec.end(),phone_);
        vec.insert(vec.end(),s);


        
    }
    void enter()
    {
        string s_;
        cin>>s_;
        mapping((s_).c_str());

    }

    void print()
    {
            int two=0;
        int j;
        sort(vec.begin(),vec.end());
        for( int i=0;i<vec.size();i++)
        {
            int flags=0;
            int count=1;
            string s;
            s=vec[i];
            for(j=i+1;j<vec.size();j++)
            {
                if(!(vec[j]))
                {
                    two++;
                    flags=1;
                    count++;
                }
                else
                {
                    if(flags!=0)
                        //    cout<<s<<" "<<"No duplicates"<<endl;
                    cout<<s<<" "<<count<<endl;   
               
                    i=j-1;
                    break;

                }
        }
            
            if(j==vec.size())
            {
                if(flags!=0)
                    cout<<s<<" "<<count<<endl;   
            }
        
    }
        if(!two)
        cout<<"No duplicates.";
        
}
};
int main()
{
    int n;
    cin>>n;
    Phone p;
    while(n--)
    {
        p.enter();   
    }
    p.print();
    return 0;
}
测试数据通过,可是总是提交不上去,老出答案错误。
搜索更多相关主题的帖子: 简体中文 电话号码 Memory Online 
2011-09-02 15:50
lqsh
Rank: 2
来 自:山东济南
等 级:论坛游民
帖 子:26
专家分:58
注 册:2011-8-29
收藏
得分:0 
说说解题思路也行
2011-09-03 16:09
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:10 
测试数据通过?Input 12个,Output 9个你感觉测试通过了?
程序代码:
for(j=i+1;j<vec.size();j++)
            {
                if(!(vec[j]))
                {
                    two++;
                    flags=1;
                    count++;
                }

上面悲剧了,你说要是vec中只有一个元素该怎么办。
用map代替vector会更简单、

离恨恰如春草,更行更远还生。
2011-09-03 17:49
lqsh
Rank: 2
来 自:山东济南
等 级:论坛游民
帖 子:26
专家分:58
注 册:2011-8-29
收藏
得分:0 
input12个测试数据,对于每个出现重复的号码产生一行输出,空格之后输出重复次数。出现一次的电话号码不输出,除非输入数据中没有重复的号码,输出一行:
No duplicates.
你说要是vec中只有一个元素,肯定没有重复的号码,输出一行:
No duplicates.
综上所述确实output 9个
2011-09-03 20:15
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:0 
恩,是我看错了,不过也确实有问题,你输入3个一样的看看。

离恨恰如春草,更行更远还生。
2011-09-03 21:23
天之水起
Rank: 2
等 级:论坛游民
帖 子:3
专家分:12
注 册:2011-8-29
收藏
得分:10 
思路:你可以直接在输入的过程中将电话转化成十进制数,然后在sort一次,比较有无重复输出就OK了,看你的代码看不下去,做ACM题一般都很少用到类,多考虑算法
2011-09-04 11:50
快速回复:487-3279问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017564 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved