#include "paint.h"
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define ll long long
#define ld long double
const int N=1e5+50,inf=1e9;
int n,m,K;
bool desno[N];
bool imac[510][510];
int dp[2][N],now=1,pre;
int minimumInstructions(int n1,int m1,int K1,vector<int>C,vector<int>A,vector<vector<int>>colors) {
n=n1,m=m1,K=K1;
vector<int>ids[K+1];
for(int i=0;i<m;i++){
sort(colors[i].begin(),colors[i].end());
for(auto j:colors[i]) ids[j].pb(i);
}
for(int i=0;i<m;i++){
for(auto j:colors[i]) imac[i][j]=true;
}
for(int i=n-1;i>=0;i--){
swap(now,pre);
for(int j=0;j<m;j++) dp[now][j]=0;
int maks=0;
for(auto j:ids[C[i]]){
dp[now][j]=max(dp[now][j],dp[pre][(j+1)%m]+1);
maks=max(maks,dp[now][j]);
}
if(maks>=m) desno[i]=true;
}
/*for(int y=0;y<=n-m;y++){
for(int x=0;x<m;x++){
//printf("%i %i\n",x,y);
bool moze=true;
for(int l=0;l<m;l++){
//int lb=lower_bound(colors[(x+l)%m].begin(),colors[(x+l)%m].end(),C[y+l])-colors[(x+l)%m].begin();
//if(!(lb<colors[(x+l)%m].size()&&colors[(x+l)%m][lb]==C[y+l])) moze=false;
if(!imac[(x+l)%m][C[y+l]]){moze=false;break;}
}
if(moze){desno[y]=true;break;}
}
}*/
//for(int i=0;i<n;i++) cout<<desno[i]<<" ";cout<<endl;
int dp[n+10]={0};
for(int i=0;i<=n;i++) dp[i]=inf;
dp[n]=0;
for(int i=n-1;i>=0;i--){
if(!desno[i]) continue;
for(int j=i+1;j<=min(i+m,n);j++){
dp[i]=min(dp[i],dp[j]+1);
}
}
int res=dp[0];
if(res>=inf) res=-1;
return res;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |