Submission #1203697

#TimeUsernameProblemLanguageResultExecution timeMemory
1203697fadyscube9월 (APIO24_september)C++20
10 / 100
1085 ms330356 KiB
#include "september.h"

#include <vector>
#include <bits/stdc++.h>

using namespace std;

int ans = 0;

int check (vector<vector<int>> &S, vector<int> &perm) {
    int k = 0;

    set<int> s;
    vector<set<int>> ss(S.size());
    for (int i = 0; i < perm.size(); i++) {
        s.insert(perm[i]);
        bool yes = true;
        for (int j = 0; j < S.size(); j++) {
            ss[j].insert(S[j][i]);
            if (ss[j] != s) yes = false;
        }
        if (yes) k++;
    }

    return k;
}

void permutation (vector<int> graph, vector<int> perm, vector<vector<int>> &S) {
    if (perm.size() == graph.size()-1) {
        ans = max(ans, check(S, perm));
        return;
    }

    vector<bool> occ(graph.size(), 0);
    for (int i = 1; i < graph.size(); i++)
        occ[graph[i]] = 1;

    for (int i = 1; i <= graph.size()-1; i++) {
        if (occ[i]) continue;
        vector<int> tmp = perm;
        tmp.push_back(i);
        vector<int> tmp_graph = graph;
        tmp_graph[i] = i;
        permutation(tmp_graph, tmp, S);
        break;
    }
}

int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) {
    ans = 0;
    permutation(F, {}, S);

    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...