Monday, May 4, 2015

UVa 755 - 487--3279

// UVa 755 - 487--3279

#include <string>
#include <map>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;

map<int, int> reps;
vector<int> duplicates;

int strtoint(const string & word) {
	int ordinal = 0;
	for (int i = 0; i < word.length(); i++) {
		if (word[i] == '-')
			continue;
		int val;
		if ('0' <= word[i] && word[i] <= '9')
			val = word[i] - '0';
		else if ('A' <= word[i] && word[i] <= 'R')
			val = (word[i] - 'A') / 3 + 2;
		else if (word[i] == 'S')
			val = 7;
		else if ('T' <= word[i] && word[i] <= 'V')
			val = 8;
		else if ('W' <= word[i] && word[i] <= 'Y')
			val = 9;
		ordinal = ordinal * 10 + val;
	}
	return ordinal;
}

int main() {
	int t;
	for (cin >> t; t; t--) {
		reps.clear();
		duplicates.clear();
		int n;
		for (cin >> n; n; n--) {
			string word;
			cin >> word;
			int ordinal = strtoint(word);
			reps[ordinal]++;
			if (reps[ordinal] == 2)
				duplicates.push_back(ordinal);
		}

		if (duplicates.size() > 0) {
			sort(duplicates.begin(), duplicates.end());
			for (int i = 0; i < duplicates.size(); i++) {
				int left = duplicates[i] / 10000;
				int right = duplicates[i] % 10000;
				if (left < 100)
					cout << "0";
				if (left < 10)
					cout << "0";
				cout << left << "-";
				if (right < 1000)
					cout << "0";
				if (right < 100)
					cout << "0";
				if (right < 10)
					cout << "0";
				cout << right << " " << reps[duplicates[i]] << endl;
			}
		} else
			cout << "No duplicates." << endl;
		if (t > 1)
			cout << endl;
	}

	return 0;
}

No comments:

Post a Comment