PKU 1002

  一开始直接用map和string模拟,结果超时,然后转换为整数hash,但输出后前导0没了,完了就在每个数字前多加一位1,但用sort好像也得超时,看网上说要用堆排序,细节挺多的,主要是要减少时间,代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
#include <algorithm>
using namespace std;
char t[100];
int key,tel[100005]={0},size=0;
int main()
{
	int n;
	map<int,int> ntel;
	scanf("%d",&n);getchar();
	for(int i=1;i<=n;i++){
		key=1;
		scanf("%s",t);getchar();
		int len=strlen(t),mark=0;
		for(int i=0;i<len;i++){
			if(t[i]=='-') continue;
			if(mark==7) break;
			mark++;
			int tnum;
			if(t[i]>='0'&&t[i]<='9') tnum=t[i]-'0';
			if(t[i]=='A'||t[i]=='B'||t[i]=='C') tnum=2;
			else if(t[i]=='D'||t[i]=='E'||t[i]=='F') tnum=3;
			else if(t[i]=='G'||t[i]=='H'||t[i]=='I') tnum=4;
			else if(t[i]=='J'||t[i]=='K'||t[i]=='L') tnum=5;
			else if(t[i]=='M'||t[i]=='N'||t[i]=='O') tnum=6;
			else if(t[i]=='P'||t[i]=='R'||t[i]=='S') tnum=7;
			else if(t[i]=='T'||t[i]=='U'||t[i]=='V') tnum=8;
			else if(t[i]=='W'||t[i]=='X'||t[i]=='Y') tnum=9;
			key=key*10+tnum;
		}
		if(ntel[key]==0)
			tel[size++]=key;
		ntel[key]++;
	}
	make_heap(tel,tel+size);
	sort_heap(tel,tel+size);
	bool mark=false;
	for(int i=0;i<size;i++) if(ntel[tel[i]]>1){
		char a[10]={0};
		sprintf(a,"%d",tel[i]);
		printf("%c%c%c-%c%c%c%c %d\n",a[1],a[2],a[3],a[4],a[5],a[6],a[7],ntel[tel[i]]);
		mark=true;
	}
	if(!mark) cout<<"No duplicates."<<endl;
	return 0;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值