Submission #1318010

#TimeUsernameProblemLanguageResultExecution timeMemory
1318010_8_8_Painting Walls (APIO20_paint)C++17
0 / 100
1596 ms7224 KiB


    #include <bits/stdc++.h>
     
    using namespace std;
    using ll = long long;
     
    const ll N = 3e5 + 5;
    const ll INF = 1e9 + 5;
    const ll MOD = 998244353;
    int dp[N], ch[N], ans = 0;
    vector<vector<ll>> v(N);
     
    void calc(int N, int M, int K, vector<int> C, vector<int> A, vector<vector<int>> B) {
    	vector<int> cord;
    	for(int i = 0; i <= N - M; i++) {
    		int ok = 0;
    		for(auto x : v[C[i]]) {
    			int need = M - 1, worker = (x + 1) % M, cur = i + 1, curok = 1;
    			while(need) {
    				int id = lower_bound(v[C[cur]].begin(), v[C[cur]].end(), worker) - v[C[cur]].begin();
    				if(id < v[C[cur]].size() && v[C[cur]][id] == worker) {
    					need--;
    					worker = (worker + 1) % M;
    					cur++;
    				} else {
    					curok = 0;
    					break;
    				}
    			}
    			ok |= curok;
    			if(ok) {
    				break;
    			}
    		}
    		if(ok) {
    			cord.push_back(i);
    		}
    	}
    	ll l = 0, r = 0, sum = 0, can = 1;
    	while(true) {
    		int id = upper_bound(cord.begin(), cord.end(), r) - cord.begin();
    		if(id != 0) {
    			id--;
    			r = cord[id] + M;
    			l = cord[id] + 1;
    			sum++;
    			if(r >= N) {
    				break;
    			}
    		} else {
    			ans = -1;
    			can = 0;
    			break;
    		}
    	}
    	if(can) {
    		ans = sum;
    	}
    }
     
    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++) {
        		v[B[i][j]].push_back(i);
        	}
        }
        for(int i = 0; i < K; i++) {
        	sort(v[i].begin(), v[i].end());
        }
        calc(N, M, K, C, A, B);
        for(int i = 0; i < K; i++) v[i].clear();
    	for(int i = 0; i < N; i++) ch[i] = dp[i] = 0;
        return ans;
    }

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