#include #include int checkcount = 0; int N; int teama[20] = {0}; int teamb[20] = {0}; int counta; int countb; int depth; char genders[20] = {0}; int years[20] = {0}; int skills[20] = {0}; int mindiff; void check() { int i,j; int skilla = 0; int skillb = 0; int countsya[11] = {0}; int countsyb[11] = {0}; int countsga[2] = {0}; int countsgb[2] = {0}; checkcount++; // check genders for (i = 0; i < counta; i++) { if (genders[teama[i]] == 'm') countsga[0]++; else countsga[1]++; } for (i = 0; i < countb; i++) { if (genders[teamb[i]] == 'm') countsgb[0]++; else countsgb[1]++; } for (i = 0; i < 2; i++) if ( abs(countsga[i] - countsgb[i]) > 1) return; // check years for (i = 0; i < counta; i++) countsya[years[teama[i]]]++; for (i = 0; i < countb; i++) countsyb[years[teamb[i]]]++; for (i = 0; i < 10; i++) if ( abs(countsya[i] - countsyb[i]) > 1) return; // calc skills for (i = 0; i < counta; i++) skilla += skills[teama[i]]; for (i = 0; i < countb; i++) skillb += skills[teamb[i]]; if ( abs(skilla - skillb) < mindiff) mindiff = abs(skilla - skillb); /* if (mindiff == 10) { cout << countsga[0] << " " << countsgb[0] << " gends" << endl; for (i = 0; i <= counta; i++) cout << teama[i] << " 1" << endl; for (i = 0; i <= countb; i++) cout << teamb[i] << " 2" << endl; cout << endl << endl; } */ } void recurse() { if (depth == N) { check(); } else { depth++; teama[counta] = depth; counta++; recurse(); counta--; teamb[countb] = depth; countb++; recurse(); countb--; depth--; } } int main(int argc, char* argv[]) { ifstream infile("SNOWBALL.IN"); ofstream outfile("SNOWBALL.OUT"); int K; int i,j,k,l; infile >> K; for (i = 0; i < K; i++) { infile >> N; for (j = 1; j <= N; j++) { infile >> genders[j] >> years[j] >> skills[j]; //cout << genders[j] << " " << years[j] << " " << skills[j]; //cout << endl; } mindiff = 99999; checkcount = 0; counta = 0; countb = 0; depth = 0; recurse(); int diff = mindiff; //cout << checkcount << endl; //cout << "Data Set " << i << ": Least skill difference is " << diff << endl; outfile << "Data Set " << i+1 << ": Least skill difference is " << diff << endl; } infile.close(); outfile.close(); }