제출 #1199514

#제출 시각아이디문제언어결과실행 시간메모리
1199514guagua0407벽 칠하기 (APIO20_paint)C++20
28 / 100
1595 ms589824 KiB
#include "paint.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
#define f first
#define s second
#define all(x) x.begin(),x.end()
#define _ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);

int minimumInstructions(
    int n, int m, int k, std::vector<int> c,
    std::vector<int> a, std::vector<std::vector<int>> b) {
    vector<vector<int>> pos(k);
    for(int i=0;i<n;i++){
        pos[c[i]].push_back(i);
    }
    vector<vector<int>> con(k);
    for(int i=0;i<m;i++){
        for(int j=0;j<a[i];j++){
            con[b[i][j]].push_back(i);
        }
    }
    vector<vector<int>> cnt(n,vector<int>(m));
    for(int i=0;i<k;i++){
        for(auto x:pos[i]){
            for(auto y:con[i]){
                for(int z=0;z<=y;z++){
                    if(x-(y-z)>=0) cnt[x-(y-z)][z]++;
                }
                for(int z=y+1;z<m;z++){
                    if(x-m+(z-y)>=0) cnt[x-m+(z-y)][z]++;
                }
            }
        }
    }
    int r=-1;
    int l=0;
    int ans=0;
    while(r<n-1){
        int mx=-1;
        while(l<=r+1){
            for(int j=0;j<m;j++){
                if(cnt[l][j]==m){
                    mx=l+m-1;
                }
            }
            l++;
        }
        //cout<<l<<' '<<r<<' '<<mx<<'\n';
        if(mx<=r) return -1;
        r=mx;
        ans++;
    }
    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...