对了五个测试点
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
struct Team {
string name;
vector<string> member;
int mid;
int rk;
Team(string n, vector<string> m, int id, int r)
: name(n), member(m), mid(id), rk(r) {}
};
bool cmp(const Team& a, const Team& b) {
return a.rk < b.rk;
}
class Sol {
private:
vector<Team> v1;
vector<Team> v2;
int ans;
vector<string> f1(vector<string>& v)
{
sort(v.begin(), v.end());
return v;
}
bool f2(const vector<string>& v) {
vector<string> tmp = v;
sort(tmp.begin(), tmp.end());
return unique(tmp.begin(), tmp.end()) == tmp.end();
}
public:
Sol() : ans(0) {}
void solve1() {
int n, m, t, k;
cin >> n >> m >> t >> k;
for (int i = 0; i < n; i++)
{
string name;
vector<string> mem(3);
int id, r;
cin >> name;
for (int j = 0; j < 3; j++) {
cin >> mem[j];
}
cin >> id >> r;
if (!f2(mem)) continue;
mem = f1(mem);
v1.push_back(Team(name, mem, id, r));
}
}
void solve2() {
map<int, vector<Team> > mp;
for (size_t i = 0; i < v1.size(); i++) {
mp[v1[i].mid].push_back(v1[i]);
}
map<int, vector<Team> >::iterator it;
for (it = mp.begin(); it != mp.end(); ++it) {
vector<Team>& tmp = it->second;
sort(tmp.begin(), tmp.end(), cmp);
for (size_t i = 0; i < tmp.size(); i++)
{
bool ok = true;
for (size_t j = 0; j < tmp[i].member.size(); j++)
{
for (size_t k = 0; k < v2.size(); k++) {
vector<string>& v = v2[k].member;
for (size_t l = 0; l < v.size(); l++) {
if (tmp[i].member[j] == v[l])
{
ok = false;
break;
}
}
if (!ok) break;
}
if (!ok) break;
}
if (ok)
{
v2.push_back(tmp[i]);
ans++;
}
}
}
}
void solve3() {
cout << ans << endl;
for (size_t i = 0; i < v2.size(); i++)
{
cout << v2[i].name;
for (size_t j = 0; j < v2[i].member.size(); j++)
{
cout << " " << v2[i].member[j];
}
cout << endl;
}
}
};
int main()
{
Sol s;
s.solve1();
s.solve2();
s.solve3();
return 0;
}