제출 #1272176

#제출 시각아이디문제언어결과실행 시간메모리
1272176StefanSebezPainting Walls (APIO20_paint)C++20
51 / 100
1595 ms13248 KiB
#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 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...