请问入门赛H题怎么做
  • 板块学术版
  • 楼主qowjsn1235
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/12/14 17:22
  • 上次更新2024/12/14 20:17:11
查看原帖
请问入门赛H题怎么做
1412464
qowjsn1235楼主2024/12/14 17:22

对了五个测试点

#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;
}
2024/12/14 17:22
加载中...