Submission #965908

#TimeUsernameProblemLanguageResultExecution timeMemory
965908pccPainting Walls (APIO20_paint)C++17
28 / 100
1589 ms154344 KiB
#include "paint.h" #include <vector> #include <bits/stdc++.h> using namespace std; const int mxn = 1e5+10; #define pii pair<int,int> #define fs first #define sc second set<int> col[mxn]; bitset<mxn> able; int N,M,K; int arr[mxn]; bool check(int s){ bool re = false; for(auto i:col[arr[s]]){ int now = s; bool f = true; for(int j = 0;j<M;j++){ if(col[arr[now]].find(i) == col[arr[now]].end()){ f = false; break; } now++; i = (i+1)%M; } if(f)re = true; } return re; } namespace GRAPH{ vector<int> paths[mxn]; int dist[mxn]; queue<int> q; void bfs(int s){ memset(dist,-1,sizeof(dist)); q.push(s); dist[s] = 0; while(!q.empty()){ auto now = q.front(); q.pop(); for(auto nxt:paths[now]){ if(dist[nxt] == -1){ dist[nxt] = dist[now]+1; q.push(nxt); } } } return; } int GO(){ for(int i = 0;i<N;i++){ if(able[i]){ for(int j = 1;j<=M;j++)paths[i].push_back(i+j); } } bfs(0); return dist[N]; } } int minimumInstructions( int NN, int MM, int K, std::vector<int> C, std::vector<int> A, std::vector<std::vector<int>> B) { N = NN,M = MM; for(int i = 0;i<M;i++){ for(int j = 0;j<A[i];j++)col[B[i][j]].insert(i); } for(int i = 0;i<N;i++)arr[i] = C[i]; for(int i = 0;i+M<=N;i++)able[i] = check(i); return GRAPH::GO(); }
#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...