Submission #576556

#TimeUsernameProblemLanguageResultExecution timeMemory
576556codr0Painting Walls (APIO20_paint)C++14
100 / 100
484 ms13024 KiB
// Code by Parsa Eslami
#include "paint.h" 
#include <bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
#define pll pair<ll,ll>
 
#define bit(i,j) ((j>>i)&1)
#define minm(x,y) x=min(x,y)
#define maxm(x,y) x=max(x,y)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define FORR(i,a,b) for(int i=a;i>=b;i--)
#define S second
#define F first
#define pb push_back
#define SZ(x) (int)x.size()
#define all(x) x.begin(),x.end()
#define err(x) cout<<#x<<": "<<x<<'\n'
#define wtf cout<<"WHAT THE FUCK!\n"
#define dmid int mid=(r+l)/2
#define lc 2*id
#define rc 2*id+1

using namespace std;


	int minimumInstructions(int n,int m,int k,vector<int> C,vector<int> A,vector<std::vector<int>> B){
		bool x[n]={};
		int num[2][m];
		FOR(w,0,1) FOR(i,0,m-1) num[w][i]=0;
		vector<int> f[k];
		FOR(i,0,m-1) FOR(j,0,A[i]-1) f[B[i][j]].pb(i);
		FOR(i,0,n-1){
			bool w=i&1;
			for(int v:f[C[i]]){
				num[w][v]=num[!w][(v-1+m)%m]+1;
				if(num[w][v]>=m) x[i-m+1]=1;
			}
			if(i>0) for(int v:f[C[i-1]]) num[!w][v]=0;
		}
		int rt=1;
		int lch=0;
		int rch=m;
		if(!x[0]) return -1;
		while(1){
			if(rch>=n) break;
			int last=-1;
			FOR(j,lch+1,min(n-1,rch)) if(x[j]) last=j;
			if(last==-1) return -1;
			lch=min(n-1,rch);
			rch=last+m;
			rt++;
		}
		return rt;
	}


#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...