| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 | 
|---|---|---|---|---|---|---|---|
| 1131366 | Champ_Naman | 벽 칠하기 (APIO20_paint) | C++20 | 0 ms | 0 KiB | 
#include "paint.h"
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define nl '\n'
int pre[100000][200];
int minimumInstructions(int n, int m, int k, vector<int> c, vector<int> a, vector<vector<int>> b){
   for(int i=0; i<m; i++){
      for(int j=0; j<a[i]; j++){
         pre[b[i][j]][i] = 1;
      }
   }
   int ans = 0;
   for(int i=0; i<n;){
      int mx = -1e18;
      for(int j=0; j<m; j++){
         if(!pre[c[i]][j]) continue;
         int cnt = 0;
         while(i + cnt < n and pre[c[i + cnt]][(j + cnt) % m] and cnt < m){
            cnt++;
         }
         if(i - (m-cnt) < 0) continue;
         int tf = 1;
         for(int k=j-1, x=1; x<=m-cnt; k--, x++){
            k = (k+m) % m;
            if(!pre[c[i-x]][k]) tf = 0;
         }
         
         if(tf){
            mx = max(mx, i+cnt);
         }
      }
      if(mx == -1e18) return -1;
      i = mx;
      ans++;
   }
   return ans;
}
signed main(){
//    ios_base::sync_with_stdio(0);
//    cin.tie(NULL);cout.tie(NULL);
//    int n, m, k;
//    cin>>n>>m>>k;
//    vector<int> c;
//    for(int i=0; i<n; i++){
//       int x;
//       cin>>x;
//       c.push_back(x);
//    }
//    vector<int> a(m);
//    vector<vector<int>> b(m);
//    for(int i=0; i<m; i++){
//       cin>>a[i];
//       for(int j=0; j<a[i]; j++){
//          int x;
//          cin>>x;
//          b[i].push_back(x);
//       }
//    }
//    cout<<minimumInstructions(n, m, k, c, a, b);
   return 0;
}
