제출 #1367995

#제출 시각아이디문제언어결과실행 시간메모리
1367995nathlol29월 (APIO24_september)C++20
100 / 100
522 ms33940 KiB
#include "september.h"
#include <bits/stdc++.h>
using namespace std;

int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) {
    vector<vector<int>> deg(N, vector<int>(M)), adj(N), cnt(N, vector<int>(M));
    for(int i = 1;i<N;i++){
        for(int j = 0;j<M;j++) deg[F[i]][j]++;
        adj[F[i]].push_back(i);
    }
    multiset<int> ss[M];
    auto add = [&](int x, int t){
        if(ss[t].find(cnt[x][t]) != ss[t].end()) ss[t].erase(ss[t].find(cnt[x][t]));
        ss[t].insert(++cnt[x][t]);
    };
    auto rem = [&](int x, int t){
        if(ss[t].find(cnt[x][t]) != ss[t].end()) ss[t].erase(ss[t].find(cnt[x][t]));
        ss[t].insert(--cnt[x][t]);
    };
    int ans = 0;
    set<int> s[M], c[M], cc;
    for(int i = 0;i<N - 1;i++){
        bool bigf = 1;
        for(int k = 0;k<M;k++){
            cc.insert(S[k][i]);
            add(S[k][i], k);
            for(auto v : adj[S[k][i]]) rem(v, k);
            bigf &= (*ss[k].begin() >= 0);
        }
        if(bigf && cc.size() == i + 1) ++ans;
    }
    return ans;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…