首页 > 其他 > 详细

POJ1002 487-3279

时间:2014-04-03 04:54:16      阅读:421      评论:0      收藏:0      [点我收藏+]

思考:用G++ 超时,用C++ 500多ms.

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 100010;
int v[30] = {2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9 };

vector<string> res;
int cnt[maxn+5];

int main()
{
	int n;
	scanf("%d", &n);
	getchar();
	char tmp[100];
	char deal[100];
	res.clear();
	for(int t = 1; t <= n; t++) {
		gets(tmp);
		int index = 0;
		int len = strlen(tmp);
		for(int i = 0; i < len; i++) {
			if(tmp[i] >= ‘0‘ && tmp[i] <= ‘9‘) {
				deal[index++] = tmp[i];
			} else if(tmp[i] >= ‘A‘ && tmp[i] < ‘Z‘ && tmp[i] != ‘Q‘) {
				char mid = v[tmp[i]-‘A‘] + ‘0‘;
				deal[index++]  = mid;
			}
			if(index==3) deal[index++] = ‘-‘;
		}
		deal[index] = ‘\0‘;
		res.push_back(deal);
	}
	sort(res.begin(), res.end());
	memset(cnt, 0, sizeof(cnt));
	cnt[0] = 1;
	for(int i = 1; i < (int)res.size(); i++) {
        if(!res[i].compare(res[i-1])) cnt[i] = cnt[i-1]+1;
        else cnt[i] = 1;
	}
	bool ok = false;
	char str[100];
	int len = res.size();
	for(int i = 1; i < len; i++) {
        if((cnt[i]>=2 && cnt[i+1]==1)||(i == len-1 && cnt[i]>=2)) {
            int Size = res[i].length();
            res[i].copy(str, Size, 0);
            str[Size] = ‘\0‘;
            printf("%s %d\n", str, cnt[i]);
            if(!ok) ok = true;
        }
	}
	if(!ok) printf("No duplicates. \n");
	return 0;
}

POJ1002 487-3279,布布扣,bubuko.com

POJ1002 487-3279

原文:http://blog.csdn.net/achiberx/article/details/22821735

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!