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

Re:AC了,空间换时间,没用排序。“39320K 594MS C 890B”。代码只有30+行。

Posted by szpgod at 2011-04-28 09:36:31 on Problem 1002
In Reply To:AC了,空间换时间,没用排序。“39320K 594MS C 890B”。代码只有30+行。 Posted by:lachening at 2011-04-14 12:12:59
> 号码是7位数。开一个10000000大小的int数组。 
> 如果号码是123-4567。就在数组的1234567号计数。  重复则++。
> 也就是 号码本身作为数组的下标。
> 当全部统计完以后,for(i=0;i<10000000;i++) 从最小号开始,顺序输出所有数组内容>1的情况   printf("%03d-%04d %d",下标/10000,下标%10000,数组内容);
> 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{   
    int phoneNum;
    int i,j,k,m=0;
    int tempNum;;
    int noDupli =0;
    int len;
    char str[100]={0};
    int *flag=NULL;
    char temp[100]={0};
    scanf("%d",&phoneNum); 
    flag=(int*)malloc(10000000*sizeof(int));
    memset(flag,0,10000000*sizeof(int));

    for(i =0;i<phoneNum;i++)
    {   
        scanf("%s",str);
        len =strlen(str);
        k=0;
        for (j=0;j<len;j++)
        {
            if (str[j] == '-' || str[j]=='Q' || str[j]=='Z')
            {
                continue;
            }
            if (str[j]>='A' && str[j]<='C')
            {
                temp[k++]='2';
            }
          else  if (str[j]>='D' && str[j]<='F')
            {
                temp[k++]='3';
            }
          else if (str[j]>='G' && str[j]<='I')
            {
                temp[k++]='4';
            }
          else  if (str[j]>='J' && str[j]<='L')
            {
                temp[k++]='5';
            }
          else  if (str[j]>='M' && str[j]<='O')
            {
                temp[k++]='6';
            }
          else  if (str[j]>='P' && str[j]<='S')
            {
                temp[k++]='7';
            }
          else  if (str[j]>='T' && str[j]<='V')
            {
                temp[k++]='8';
            }
          else  if (str[j]>='W' && str[j]<='Y')
            {
                temp[k++]='9';
            }
          else  if (str[j]>='0' && str[j]<='9')
            {
                temp[k++] =str[j];
            }
         
        }
        temp[k++]='\0';
        tempNum =atoi(temp);
        flag[tempNum]++;
        memset(temp,0,k);
    }
    for (i=0;i<10000000;i++)
    {
        if (flag[i]>1)
        {   
            noDupli =1;
            printf("%03d-%04d %d\n",i/10000,i%10000,flag[i]);
        }
    }
    if (!noDupli)
    {
        printf("No duplicates.");
    }
    return 0;
}


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