//写了一个晚上,用c++的map和string等一系列的库函数,一直都超时,不得不看解题报告了,发觉其他人的处理真的很
//奇妙,自己还需要再学习学习才可以!加油,努力!
//G++环境下提交
#include "iostream"
#include "cstdio"
#include "algorithm"
using namespace std;
char str[100];
int solve()
{
int sum = 0, i, k;
for (i = 0, k = 0; k < 7; i++)
{
if (str[i] >= '0' && str[i] <= '9')
{
sum *= 10;
k++;
sum += (str[i]-48);
}
else if (str[i] >= 'A' && str[i] <= 'Z')
{
sum *= 10;
k++;
sum+=((str[i]-'A'-(str[i]>'Q'))/3+2);
}
}
return sum;
}
int main()
{
int num, i;
cin >> num;
int ans[num];
getchar();
for (i = 0; i < num; i++)
{
gets(str);
ans[i] = solve();
}
sort(ans, ans+num);
bool p=false;
num = num - 1;
for(int i=0,n=1;i<num;i+=n=1)
{
while(ans[i]==ans[i+1])
{
n++;
i++;
}
if(n>1)
{
printf("%03d-%04d %d\n",ans[i]/10000,ans[i]%10000,n);
p=true;
}
}
if(!p)printf("No duplicates.\n");
return 0;
}
//C++环境下提交 用空间换时间的做法!
#include "cstdio"
#include "iostream"
#include "memory.h"
using namespace std;
int ans[10000000];
char str[50];
int solve()
{
int sum = 0, i, k;
for (i = 0, k = 0; k < 7; i++)
{
if (str[i] >= '0' && str[i] <= '9')
{
sum *= 10;
k++;
sum += (str[i] - 48);
}
else if (str[i] >= 'A' && str[i] <= 'Z')
{
sum *= 10;
k++;
sum += ((str[i] - 'A' - (str[i] > 'Q')) / 3 + 2);
}
}
return sum;
}
int main()
{
int num, i;
scanf("%d", &num);
memset(ans, 0, sizeof(ans));
getchar();
for (i = 0; i < num; i++)
{
gets(str);
ans[solve()]++;
}
bool flag = false;
for (i = 0; i < 10000000; i++)
{
if (ans[i] > 1)
{
printf("%03d-%04d %d\n", i / 10000, i % 10000, ans[i]);
flag = true;
}
}
if (!flag)
printf("No duplicates.\n");
system("pause");
}
poj 1002 487-3279
最新推荐文章于 2024-10-10 00:35:32 发布