Submission #899159

#TimeUsernameProblemLanguageResultExecution timeMemory
899159LCJLYPainting Walls (APIO20_paint)C++14
28 / 100
1563 ms57172 KiB
#include "paint.h" #include <bits/stdc++.h> #define show(x,y) cout << y << " " << #x << endl; #define show2(x,y,i,j) cout << y << " " << #x << " " << j << " " << #i << endl; #define show3(x,y,i,j,p,q) cout << y << " " << #x << " " << j << " " << #i << " " << q << " " << #p << endl; #define show4(x,y) for(auto it:x) cout << it << " "; cout << #y << endl; using namespace std; int n,m,k; int arr[100005]; unordered_set<int>check[500005]; int memo[100005]; vector<int>color[100005]; int dp(int index){ if(index==n) return 0; else if(index>n-m) return INT_MAX/3; if(memo[index]!=-1) return memo[index]; int ans=INT_MAX/3; //check bool amos=false; //for(int x=0;x<m;x++){ //bool hayden=true; //for(int y=0;y<m;y++){ //if(check[x+y].find(arr[index+y])==check[x+y].end()) hayden=false; //} //amos|=hayden; //} for(auto it:color[arr[index]]){ int pos=it; bool hayden=true; for(int y=0;y<m;y++){ if(check[pos+y].find(arr[index+y])==check[pos+y].end()) hayden=false; } amos|=hayden; } if(amos){ for(int x=1;x<=m;x++){ ans=min(ans,dp(index+x)+1); } } //show2(index,index,amos,amos); return memo[index]=ans; } int minimumInstructions(int N, int M, int K, vector<int>C, vector<int>A, vector<vector<int>>B){ n=N; m=M; k=K; for(int x=0;x<n;x++){ arr[x]=C[x]; } for(int x=0;x<m;x++){ for(int y=0;y<A[x];y++){ check[x].insert(B[x][y]); check[x+m].insert(B[x][y]); color[B[x][y]].push_back(x); } } memset(memo,-1,sizeof(memo)); int hold=dp(0); if(hold>n){ return -1; } else return hold; }
#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...