제출 #403340

#제출 시각아이디문제언어결과실행 시간메모리
403340danielcm585Painting Walls (APIO20_paint)C++14
100 / 100
606 ms14276 KiB
#include "paint.h"

#include <bits/stdc++.h>
using namespace std;

#define fi first
#define se second
#define pb push_back

typedef long long ll;
typedef pair<int,int> ii;
typedef pair<ii,int> iii;

const int N = 1e5;
const int M = 5e4;
const int K = 1e5;
int day;
int dp[M+2], vis[M+2];
vector<int> ls[K+2];

/*
dp[x] kontraktor x+i mengerjakan i
for (j : ls[c[i]]) {
    dp[(j-i+n*m)%m]++
    cek
}

for (int i=0;i<N;)

dp[x]++
canTake[i]
dp[x][i] >= M
[i-m+1,i]

dp[x][y-2]
dp[x][y-1]
dp[x][y]

*/

void reset(int x)
{
    if (vis[x] < day-1)
        dp[x] = 0;
    vis[x] = day;
}

int minimumInstructions(int n, int m, int k, vector<int> c, vector<int> a, vector<vector<int>> b)
{
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < a[i]; j++)
        {
            ls[b[i][j]].pb(i);
        }
    }
    int last = -1;
    int maks = -1;
    int ans = 0;
    day++;
    for (int i = 0; i < n; i++)
    {
        day++;
        for (int j : ls[c[i]])
        {
            reset((j-i+n)%m);
            dp[(j-i+n)%m]++;
            if (dp[(j-i+n)%m] >= m)
                maks = i;
        }
        if (i == last+m || i == n-1)
        {
            if (maks == last)
                return -1;
            last = maks;
            ans++;
        }
    }
    return (last != n-1 ? -1 : ans);
}

// int main()
// {
//     int N, M, K;
//     cin >> N >> M >> K;
//     vector<int> C(N);
//     for (int i = 0; i < N; i++)
//     {
//         cin >> C[i];
//     }
//     vector<int> A(M);
//     vector<vector<int>> B(M);
//     for (int i = 0; i < M; i++)
//     {
//         cin >> A[i];
//         B[i].resize(A[i]);
//         for (int j = 0; j < A[i]; j++)
//         {
//             cin >> B[i][j];
//         }
//     }
//     cout << minimumInstructions(N,M,K,C,A,B) << '\n';
// }
#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...