Friday, November 27, 2015

UVa 11222 - Only I did it!

// UVa 11222 - Only I did it!
#include <iostream>
#include <string.h>
#include <algorithm>
#include <stdio.h>
using namespace std;

int main() {
	int cases;
	cin >> cases;
	for (int c = 1; c <= cases; c++) {
		bool s[3][10001];
		memset(s, false, sizeof(s));
		int count[1000];
		int p[3][1000];
		// input
		for (int i = 0; i < 3; i++) {
			cin >> count[i];
			for (int j = 0; j < count[i]; j++) {
				cin >> p[i][j];
				s[i][p[i][j]] = true;
			}
		}

		int u_c[3];
		int u[3][1000];
		int m = 0;
		int sol[4];
		sol[0] = 0;
		// solve
		for (int i = 0; i < 3; i++) {
			u_c[i] = 0;
			for (int j = 0; j < count[i]; j++) {
				int pp = p[i][j];
				bool unique = !s[(i + 1) % 3][pp] && !s[(i + 2) % 3][pp];
				if (unique) {
					u[i][u_c[i]++] = pp;
				}
			}
			if (sol[0] == 0 || u_c[i] > u_c[m]) {
				m = i;
				sol[0] = 1;
				sol[1] = m;
			} else if (u_c[i] == u_c[m]) {
				sol[++sol[0]] = i;
			}
		}

		sort(u[m], u[m] + u_c[m]);
		// output
		printf("Case #%d:\n", c);
		for (int i = 1; i <= sol[0]; i++) {
			m = sol[i];
			cout << m + 1 << " " << u_c[m];
			for (int j = 0; j < u_c[m]; j++)
				cout << " " << u[m][j];
			cout << endl;
		}

	}

	return 0;
}

No comments:

Post a Comment