以前一次偶然的机会听说了最短代码竞赛,这两天不想干啥事,便开始做一做OJ吧,
题目见这里:http://poj.org/problem?id=1002
主要是一个字符串读取与转换,我的实现代码代码长度为651字节,39行。
#include <stdio.h>
#include <map>
typedef long D;
typedef std::map<D,D> M;
char mC[]="2223334445556667777888999";
int main(int argc, char **argv)
{
D n,t;
M m;
scanf("%d\n",&n);
for(;n!=0;n--)
{
char s[64],c;
gets(s);
t=0;
for(D i=0;s[i]!='\0';i++)
{
c=s[i];
if(c>='0'&&c<='9')
t=10*t+c-'0';
if(c>='A'&&c<'Z'&&c!='Q')
t=10*t+mC[c-'A']-'0';
}
m[t]++;
}
M::iterator it=m.begin(),iE=m.end();
while(it!=iE)
{
if(it->second>1)
{
n++;
printf("%03d-%04d %d\n",it->first/10000,it->first%10000,it->second);
}
it++;
}
if(!n)
printf("No duplicates.\n");
return 0;
}
讲解