POJ 1002
C:题意 给你一个n。然后后n行。每行一个字符串。字母+数字的个数是7个。-不考虑。如果是字母的话就通过表映射。A-B-C映射
为2…….然后求这n行相同数字的个数。如果相同数字个数>=2就输出出来,并输出个数。
思路;很简单,直接将每一行的7个数字转换为10进制的数,存到数组里。sort一遍。找出相同的个数即可。按照输出的格式再输出即可
,大水题,没时间做了
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<string>
#include<queue>
#include<set>
#include<stack>
#include<vector>
#include<map>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
#define inf 0x3f3f3f3f3f3f3f3f
const int maxn=1e8+9;
#define mem(aa,bb) memset(aa,bb,sizeof(aa))
#define PI acos(-1.0)
char str[1000];
int zz[200];
int num[110000],pos,store[110000];
int main()
{
int n;
zz['A']=zz['B']=zz['C']=2;
zz['D']=zz['E']=zz['F']=3;
zz['G']=zz['H']=zz['I']=4;
zz['L']=zz['K']=zz['J']=5;
zz['M']=zz['N']=zz['O']=6;
zz['P']=zz['R']=zz['S']=7;
zz['T']=zz['U']=zz['V']=8;
zz['W']=zz['X']=zz['Y']=9;
while(~scanf("%d",&n))
{
int len=0;
pos=0;
for(int i=0; i<n; i++)
{
scanf("%s",str);
int la=strlen(str);
int ans=0;
for(int i=0; i<la; i++)
{
if(str[i]>='0'&&str[i]<='9')
{
ans=ans*10+str[i]-'0';
}
else if(str[i]>='A'&&str[i]<='Z')
ans=ans*10+zz[str[i]];
}
num[++pos]=ans;
}
int flag=0,sum=1,pos1=0,bh[110000];
sort(num+1,num+1+pos);
// for(int i=1;i<=pos;i++)
// printf("%d\n",num[i]);
for(int i=2;i<=pos;i++)
{
if(num[i]==num[i-1])
{
sum++;
if(sum==2)
store[++pos1]=num[i];
bh[pos1]=sum;
}
else
{
sum=1;
}
}
// for(int i=1;i<=pos1;i++)
// printf("%d\n",store[i]);
if(pos1==0) printf("No duplicates.\n");
else
{
int tem[110000];
for(int i=1;i<=pos1;i++)
{
// memset(tem,0,sizeof(tem));
int qq=7;
while(store[i])
{
tem[qq]=store[i]%10;
store[i]/=10;
qq--;
}
for(int i=1;i<=7;i++)
{
printf("%d",tem[i]);
if(i==3) printf("-");
}
printf(" %d\n",bh[i]);
}
}
}
return 0;
}