| # | Time | Username | Problem | Language | Result | Execution time | Memory | 
|---|---|---|---|---|---|---|---|
| 1131367 | Champ_Naman | Painting Walls (APIO20_paint) | C++20 | 0 ms | 0 KiB | 
#include "paint.h"
#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 pre[k][m];
   for(int i=0; i<k; i++) for(int j=0; j<m; j++) pre[i][j] = 0;
   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 = -1e9;
      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 = std::max(mx, i+cnt);
         }
      }
      if(mx == -1e9) 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;
}
