Submission #1226088

#TimeUsernameProblemLanguageResultExecution timeMemory
1226088Godgift42벽 칠하기 (APIO20_paint)C++20
28 / 100
279 ms589824 KiB
#include "paint.h"

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


using namespace std;


int minimumInstructions(
    int N, int M, int K, std::vector<int> C,
    std::vector<int> A, std::vector<std::vector<int>> B) {
    int n=N;
    int m=M;
    int k=K;
    vector<int>c=C;
    vector<int>a=A;
    vector<vector<int>>b=B;
    vector<unordered_set<int>> cont(m);
    for(int i=0;i<m;i++){
        for(auto j:b[i])cont[i].insert(j);
    }
    vector<vector<int>> dp(n+m,vector<int>(n+m,-1));
    for(int i=0;i<m+n-m+1;i++){
        for(int j=0;j<m;j++){
            bool val=true;
            for(int o=0;o<m;o++){
                if(cont[(j+o)%m].count(c[(i+o)%n])==0){
                    val=false;
                    break;
                }
            }
            if(val)dp[i][i+m-1]=1;
        }
    }
    for(int i=m;i<n;i++){
        for(int j=0;j<m+n-i;j++){
            if(dp[j][j+m-1]==-1)continue;
            for(int o=j+1;o<min(j+m+1,j+i-m+2);o++){
                if(dp[o][i+j]!=-1){
                    if(dp[j][i+j]==-1)dp[j][i+j]=dp[o][i+j]+1;
                    else dp[j][i+j]=min(dp[j][i+j],dp[o][i+j]+1);
                }
            }
            int ed=i+j;
            if(dp[ed+1-m][ed]==-1)continue;
            for(int o=max(j+m-1,ed-m);o<ed;o++){
                if(dp[j][o]!=-1){
                    if(dp[j][i+j]==-1)dp[j][i+j]=dp[j][o]+1;
                    else dp[j][i+j]=min(dp[j][i+j],dp[j][o]+1);
                }
            }
        }
    }
    int ans=-1;
    for(int i=0;i<=m;i++){
        if(dp[i][i+n-1]!=-1){
            if(ans==-1)ans=dp[i][i+n-1];
            else ans=min(ans,dp[i][i+n-1]);
        }
    }
    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...