Submission #1200830

#TimeUsernameProblemLanguageResultExecution timeMemory
1200830edogawa_something벽 칠하기 (APIO20_paint)C++20
28 / 100
16 ms32500 KiB
#include "paint.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<ll> vii;
typedef pair<ll,ll> pii;
#define pb push_back
#define F first 
#define S second 
#define all(v) v.begin(),v.end()
const ll M=1e5+10;
ll n,m,c[M],a[M];
ll b[201][M],chk[505][202],cc[M];
int minimumInstructions(int N,int M,int K,vector<int>C,vector<int>A,vector<vector<int>>B) {
    n=N,m=M;
    for(int i=0;i<n;i++)
    c[i]=C[i];
    for(int i=0;i<m;i++){
    a[i]=A[i];
    for(int j=0;j<a[i];j++)
    b[i][j]=B[i][j];
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            ll l=0,r=a[j]-1,mid;
            while(l<=r){
                mid=((l+r)>>1);
                if(b[j][mid]==c[i]){
                chk[i][j]=1;
                break;
                }
                if(b[j][mid]<c[i])
                l=mid+1;
                else
                r=mid-1;
            }
        }
    }
    for(int i=0;i<n-m+1;i++){
        for(int j=0;j<m;j++){
            for(int l=0;l<m;l++){
                if(!chk[i+l][(j+l)%m])
                break;
                if(l==m-1)
                cc[i]=1;
            }
            if(cc[i])
            break;
        }
    }
    ll mx=-1,cur=-1;
    int res=0;
    for(int i=0;i<n;i++){
        if(cc[i])
        mx=max(mx,i+m-1);
        if(i>mx){
            return -1;
        }
        if(i>cur)
        cur=mx,res++;
    }
    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...