POJ 1002 487-3279 空间换时间

//空间换时间 POJ 1002 487-3279
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <stdio.h>
using namespace std;
int t[10000000];

char change(char c)
{
    if (c < 'Q')
        return (c-'A')/3+'2';
    else
        return (c-'A'-1)/3+'2';
}
void add(char* buffer)
{
    char s[20];
    int n;
    for (int i = 0, j = 0; i < strlen(buffer); i++)
    {
        if (buffer[i] >= '0' && buffer[i] <= '9')
            s[j++] = buffer[i];
        else if(isalpha(buffer[i]) && (buffer[i]!='Q') && (buffer[i] != 'Z'))
            s[j++] = change(buffer[i]);
    }
    s[7] = '\0';
    n = atoi(s);
    t[n]++;
}
int main()
{
    int caseNum;
    char buffer[50];
    bool flag = true;
    cin >> caseNum;
    memset(t, 0, sizeof(t));
    while (caseNum--)
    {
        cin >> buffer;
        add(buffer);
    }
    for (int i = 0; i < 10000000; i++)
    {
        if (t[i]>1)
        {
            flag = false;
            printf("%03d-%04d %d\n", i/10000, i%10000, t[i]);
        }
    }
    if (flag)
        cout << "No duplicates." << endl;
//    system("pause");
    return 0;
}

posted on 2012-05-25 11:33  澄哥  阅读(193)  评论(0)    收藏  举报

导航