主题:[原创]希望路过的大牛们指出错误
附件是140万行的测试数据
希望路过的大牛们指出错误
在我的电脑上测试通过,但是不知道为什么在北大ACM平台测试通过不了,总是Wrong Answer,希望路过的大牛们指出错误,O(∩_∩)O谢谢
题目如下:1002号题目 http://poj.org/problem?id=1002&lang=zh-CN&change=true
电话号码的标准格式是七位十进制数,并在第三、第四位数字之间有一个连接符。电话拨号盘提供了从字母到数字的映射,映射关系如下:
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
输入的格式是,第一行是一个正整数,指定电话号码薄中号码的数量。余下的每行是一个电话号码。每个电话号码由数字,大写字母(除了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
/////////////////////////////////////////////////////////////////////////////
我的代码:
[code=c]
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
long i,j=0,l=0,n,num;
char c[100]={0},vstr[10];
int *a=(int *)malloc(sizeof(int)*10000000);
memset(a,0,sizeof(int)*10000000);
for (i='0';i<='Z';i++)
switch (i)
{
case 'A':
case 'B':
case 'C':
c[i]=2;
break;
case 'D':
case 'E':
case 'F':
c[i]=3;
break;
case 'G':
case 'H':
case 'I':
c[i]=4;
break;
case 'J':
case 'K':
case 'L':
c[i]=5;
break;
case 'M':
case 'N':
case 'O':
c[i]=6;
break;
case 'P':
case 'Q':
case 'R':
case 'S':
c[i]=7;
break;
case 'T':
case 'U':
case 'V':
c[i]=8;
break;
case 'W':
case 'X':
case 'Y':
case 'Z':
c[i]=9;
break;
default:
if(i>='0'&&i<='9')
c[i]=i-'0';
break;
}
scanf("%d",&num);
while(num--)
{
n=0;
memset(vstr,0,sizeof(char)*10);
scanf("%s",vstr);
for(i=0;vstr[i]!=0;i++)
{
if(vstr[i]!='Q'&&(vstr[i]>='0'&&vstr[i]<='9'||vstr[i]>='A'&&vstr[i]<'Z'))
{
n=n*10+c[vstr[i]];
}
}
a[n]++;
}
for (i=1000000;i<=9999999;i++)
{
if (a[i]>1)
{
l=i/10000;
n=i%10000;
printf("%ld-%ld %d\n",l,n,a[i]);
}
}
if (l==0)
{
printf("No duplicates.\n");
}
return 0;
}
[/code]
希望路过的大牛们指出错误
在我的电脑上测试通过,但是不知道为什么在北大ACM平台测试通过不了,总是Wrong Answer,希望路过的大牛们指出错误,O(∩_∩)O谢谢
题目如下:1002号题目 http://poj.org/problem?id=1002&lang=zh-CN&change=true
电话号码的标准格式是七位十进制数,并在第三、第四位数字之间有一个连接符。电话拨号盘提供了从字母到数字的映射,映射关系如下:
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
输入的格式是,第一行是一个正整数,指定电话号码薄中号码的数量。余下的每行是一个电话号码。每个电话号码由数字,大写字母(除了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
/////////////////////////////////////////////////////////////////////////////
我的代码:
[code=c]
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
long i,j=0,l=0,n,num;
char c[100]={0},vstr[10];
int *a=(int *)malloc(sizeof(int)*10000000);
memset(a,0,sizeof(int)*10000000);
for (i='0';i<='Z';i++)
switch (i)
{
case 'A':
case 'B':
case 'C':
c[i]=2;
break;
case 'D':
case 'E':
case 'F':
c[i]=3;
break;
case 'G':
case 'H':
case 'I':
c[i]=4;
break;
case 'J':
case 'K':
case 'L':
c[i]=5;
break;
case 'M':
case 'N':
case 'O':
c[i]=6;
break;
case 'P':
case 'Q':
case 'R':
case 'S':
c[i]=7;
break;
case 'T':
case 'U':
case 'V':
c[i]=8;
break;
case 'W':
case 'X':
case 'Y':
case 'Z':
c[i]=9;
break;
default:
if(i>='0'&&i<='9')
c[i]=i-'0';
break;
}
scanf("%d",&num);
while(num--)
{
n=0;
memset(vstr,0,sizeof(char)*10);
scanf("%s",vstr);
for(i=0;vstr[i]!=0;i++)
{
if(vstr[i]!='Q'&&(vstr[i]>='0'&&vstr[i]<='9'||vstr[i]>='A'&&vstr[i]<'Z'))
{
n=n*10+c[vstr[i]];
}
}
a[n]++;
}
for (i=1000000;i<=9999999;i++)
{
if (a[i]>1)
{
l=i/10000;
n=i%10000;
printf("%ld-%ld %d\n",l,n,a[i]);
}
}
if (l==0)
{
printf("No duplicates.\n");
}
return 0;
}
[/code]