Submission #1349758

#TimeUsernameProblemLanguageResultExecution timeMemory
1349758blameazuSeptember (APIO24_september)C++20
21 / 100
1095 ms3972 KiB
#include "september.h"

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

int solve(int n, int m, vector<int> F, vector<vector<int> > S) {
	int ans = 1;
	
	vector<int> dp(n, -1);
	vector<vector<int> > in(m, vector<int>(n));
	for(int j = 0; j < m; j++) for(int i = 1; i < n; i++) in[j][F[i]]++;
	dp[0] = 0;
	for(int o = 0; o < n-1; o++) {
		vector<int> ok(n, 1);
		for(int l = 0; l < m; l++) {
			int j = S[l][o];
			in[l][F[j]]--;

			if(dp[o-1+1] != -1) {
				vector<int> vis(n);
				auto tmp_in = in[l];
				int now = 0;
				for(int k = o; k < n-1; k++) {
					int i = S[l][k];
					vis[i] = 1;
					if(tmp_in[i] > 0) now++;
					tmp_in[F[i]]--;
					if(vis[F[i]] && tmp_in[F[i]] == 0) now--;
					if(now != 0) ok[k] = 0;
				}
			}
		}
		// cout << o << ": \n";
		// for(int k = o; k < n-1; k++) {
		// 	cout << ok[k] << " \n"[k==n-2];
		// }
		if(dp[o] != -1)  {
			for(int k = o; k < n-1; k++) if(ok[k]) {
				dp[k+1] = max(dp[k+1], dp[o-1+1] + 1);
			}
		}
	}
	// for(int i = 0; i < n; i++) cout << dp[i] << " \n"[i==n-1];
	return dp[n-1];
}

/*
1
5 1
0 1 2 3 
4 3 2 1

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