PKU 1002

来源:互联网 发布:阿里云 ota 安卓 编辑:程序博客网 时间:2024/05/16 19:29

  一开始直接用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
原创粉丝点击