Online JudgeProblem SetAuthorsOnline ContestsUser
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
User ID:
Password:
  Register

1002总是TLE,我都换3种思路写了(真是太弱了…)。能帮我看看给点意见吗?

Posted by starsasumi at 2011-04-14 21:05:00 and last updated at 2011-04-14 21:07:54
如题。我是这样写的(G++)


//487-3279
//http://poj.org/problem?id=1002

#include<iostream>
#include<string.h>
using namespace std;

struct tele
{
    char telnum[25];
    int times;
};

int startCheck(tele all[],int m);
void trans(char a[]);
int insert(tele all[],char a[],int m);
void print(tele all[],int m);

const int MAX=100000;

int main()
{
    int lines;
    tele directory[MAX];
    lines = startCheck(directory,MAX);
    print(directory,lines);
    return 0;
}

int startCheck(tele all[],int m)
{
    int lines;
    cin >> lines;
    if(lines>m)
        lines = m;
    m = 0;
    for(int i=0;i<lines;i++)
    {
        char temp[25];
        cin >> temp;
        trans(temp);
        m = insert(all,temp,m);
    }
    return m;
}

int insert(tele all[],char a[],int m)
{
    if(m==0)
    {
        strcpy(all[0].telnum,a);
        all[0].times = 1;
        return 1;
    }
    int bl=1;
    for(int i=0;i<m;++i)
    {
        bl=strcmp(all[i].telnum,a);
        if(bl==0)
        {
            all[i].times++;
            return m;
            break;
        }
        if(bl==1)
        {
            for(int j=m-1;j>=i;--j)
            {
                strcpy(all[j+1].telnum,all[j].telnum);
                all[j+1].times = all[j].times;
            }
            strcpy(all[i].telnum,a);
            all[i].times = 1;
            return ++m;
        }
    }
    strcpy(all[m].telnum,a);
    all[m].times = 1;
    return ++m;
}

void print(tele all[],int m)
{
    if(!m)
        cout << "No duplicates." << endl;
    for(int i=0;i<m;++i)
        if(all[i].times>1)
            cout << all[i].telnum << ' ' << all[i].times << endl;
}

void trans(char a[])
{
    int count=0;
    char rs[9]="000-0000";
    for(int i=0;i<strlen(a);++i)
    {
        if(a[i]=='0')
        {
            rs[count] = '0';
            if(count++==2)
                ++count;
            continue;
        }
        if(a[i]=='1')
        {
            rs[count] = '1';
            if(count++==2)
                ++count;
            continue;
        }
        if('A'<=a[i]&&a[i]<='C'||a[i]=='2')
        {
            rs[count] = '2';
            if(count++==2)
                ++count;
            continue;
        }
        if('D'<=a[i]&&a[i]<='F'||a[i]=='3')
        {
            rs[count] = '3';
            if(count++==2)
                ++count;
            continue;
        }
        if('G'<=a[i]&&a[i]<='I'||a[i]=='4')
        {
            rs[count] = '4';
            if(count++==2)
                ++count;
            continue;
        }
        if('J'<=a[i]&&a[i]<='L'||a[i]=='5')
        {
            rs[count] = '5';
            if(count++==2)
                ++count;
            continue;
        }
        if('M'<=a[i]&&a[i]<='O'||a[i]=='6')
        {
            rs[count] = '6';
            if(count++==2)
                ++count;
            continue;
        }
        if(a[i]=='R'||a[i]=='P'||a[i]=='S'||a[i]=='7')
        {
            rs[count] = '7';
            if(count++==2)
                ++count;
            continue;
        }
        if('T'<=a[i]&&a[i]<='V'||a[i]=='8')
        {
            rs[count] = '8';
            if(count++==2)
                ++count;
            continue;
        }
        if('W'<=a[i]&&a[i]<='Y'||a[i]=='9')
        {
            rs[count] = '9';
            if(count++==2)
                ++count;
            continue;
        }
    }
    rs[9]=0;
    strncpy(a,rs,9);
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator