Submission #9372464


Source Code Expand

#include <cstdio>
#include <cstring>
#include <algorithm>

typedef long long LL;
const int Mod = 1000000007;
const int MN = 25005, MK = 405;

inline int qPow(int b, int e) {
	int a = 1;
	for (; e; e >>= 1, b = (LL)b * b % Mod)
		if (e & 1) a = (LL)a * b % Mod;
	return a;
}

int N, K, M, A[MN];
int Ans, B1[MN], B2[MN];

inline int check() {
	static int lst[MK];
	int ok = 0, len = 0;
	for (int i = 1; i <= K; ++i) lst[i] = 0;
	for (int i = 1; i <= M; ++i) {
		len = std::min(len + 1, i - lst[A[i]]);
		lst[A[i]] = i;
		if (len == K) ok = 1;
	} return ok ? 0 : len;
}

inline void DP(int *B, int len) {
	static int f[MK], g[MK];
	for (int i = 1; i < K; ++i) f[i] = 0;
	f[len] = B[0] = 1;
	for (int i = 1; i <= N - M; ++i) {
		int Sum = 0;
		for (int j = K - 1; j >= 1; --j) {
			Sum -= (Sum += f[j]) >= Mod ? Mod : 0;
			g[j] = (Sum + (LL)(K - j + 1) * f[j - 1]) % Mod;
		}
		std::swap(f, g);
		Sum = 0;
		for (int j = 1; j < K; ++j) Sum -= (Sum += f[j]) >= Mod ? Mod : 0;
		B[i] = Sum;
	}
}

int main() {
	scanf("%d%d%d", &N, &K, &M);
	for (int i = 1; i <= M; ++i) scanf("%d", &A[i]);
	Ans = (LL)(N - M + 1) * qPow(K, N - M) % Mod;
	int chk = check();
	if (chk) {
		if (chk == M) {
			static int f[2][MK], g[2][MK];
			f[0][1] = K, f[1][1] = M > 1 ? 0 : K;
			for (int i = 2; i <= N; ++i) {
				int S0 = 0, S1 = 0;
				for (int j = K - 1; j >= 1; --j) {
					S0 -= (S0 += f[0][j]) >= Mod ? Mod : 0;
					S1 -= (S1 += f[1][j]) >= Mod ? Mod : 0;
					g[0][j] = (S0 + (LL)(K - j + 1) * f[0][j - 1]) % Mod;
					g[1][j] = (S1 + (LL)(K - j + 1) * f[1][j - 1] + (j >= M ? g[0][j] : 0)) % Mod;
				}
				std::swap(f, g);
			}
			int S1 = 0, C = 1;
			for (int j = 1; j < K; ++j) S1 -= (S1 += f[1][j]) >= Mod ? Mod : 0;
			for (int i = 0; i < M; ++i) C = (LL)C * (K - i) % Mod;
			Ans = (Ans - (LL)S1 * qPow(C, Mod - 2)) % Mod;
		} else {
			std::reverse(A + 1, A + M + 1);
			int lb = check(), rb = chk;
			DP(B1, lb), DP(B2, rb);
			for (int i = 0; i <= N - M; ++i)
				Ans = (Ans - (LL)B1[i] * B2[N - M - i]) % Mod;
		}
	}
	printf("%d\n", (Ans + Mod) % Mod);
	return 0;
}

Submission Info

Submission Time
Task F - Colorful Sequences
User PinkRabbit
Language C++14 (GCC 5.4.1)
Score 1100
Code Size 2146 Byte
Status AC
Exec Time 112 ms
Memory 384 KiB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:48:29: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d%d", &N, &K, &M);
                             ^
./Main.cpp:49:49: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
  for (int i = 1; i <= M; ++i) scanf("%d", &A[i]);
                                                 ^

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 1100 / 1100
Status
AC × 7
AC × 47
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, sample_05.txt, sample_06.txt, sample_07.txt
All sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, sample_05.txt, sample_06.txt, sample_07.txt, sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, sample_05.txt, sample_06.txt, sample_07.txt, subtask_1_01.txt, subtask_1_02.txt, subtask_1_03.txt, subtask_1_04.txt, subtask_1_05.txt, subtask_1_06.txt, subtask_1_07.txt, subtask_1_08.txt, subtask_1_09.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_12.txt, subtask_1_13.txt, subtask_1_14.txt, subtask_1_15.txt, subtask_1_16.txt, subtask_1_17.txt, subtask_1_18.txt, subtask_1_19.txt, subtask_1_20.txt, subtask_1_21.txt, subtask_1_22.txt, subtask_1_23.txt, subtask_1_24.txt, subtask_1_25.txt, subtask_1_26.txt, subtask_1_27.txt, subtask_1_28.txt, subtask_1_29.txt, subtask_1_30.txt, subtask_1_31.txt, subtask_1_32.txt, subtask_1_33.txt
Case Name Status Exec Time Memory
sample_01.txt AC 1 ms 128 KiB
sample_02.txt AC 1 ms 128 KiB
sample_03.txt AC 1 ms 128 KiB
sample_04.txt AC 1 ms 128 KiB
sample_05.txt AC 1 ms 128 KiB
sample_06.txt AC 79 ms 128 KiB
sample_07.txt AC 36 ms 256 KiB
subtask_1_01.txt AC 1 ms 128 KiB
subtask_1_02.txt AC 1 ms 128 KiB
subtask_1_03.txt AC 1 ms 128 KiB
subtask_1_04.txt AC 1 ms 128 KiB
subtask_1_05.txt AC 1 ms 128 KiB
subtask_1_06.txt AC 111 ms 384 KiB
subtask_1_07.txt AC 79 ms 128 KiB
subtask_1_08.txt AC 1 ms 128 KiB
subtask_1_09.txt AC 112 ms 384 KiB
subtask_1_10.txt AC 14 ms 256 KiB
subtask_1_11.txt AC 7 ms 128 KiB
subtask_1_12.txt AC 1 ms 128 KiB
subtask_1_13.txt AC 26 ms 256 KiB
subtask_1_14.txt AC 111 ms 384 KiB
subtask_1_15.txt AC 79 ms 128 KiB
subtask_1_16.txt AC 1 ms 128 KiB
subtask_1_17.txt AC 110 ms 384 KiB
subtask_1_18.txt AC 88 ms 384 KiB
subtask_1_19.txt AC 1 ms 128 KiB
subtask_1_20.txt AC 1 ms 128 KiB
subtask_1_21.txt AC 35 ms 256 KiB
subtask_1_22.txt AC 101 ms 384 KiB
subtask_1_23.txt AC 1 ms 128 KiB
subtask_1_24.txt AC 1 ms 128 KiB
subtask_1_25.txt AC 110 ms 384 KiB
subtask_1_26.txt AC 28 ms 256 KiB
subtask_1_27.txt AC 1 ms 128 KiB
subtask_1_28.txt AC 1 ms 256 KiB
subtask_1_29.txt AC 110 ms 384 KiB
subtask_1_30.txt AC 3 ms 256 KiB
subtask_1_31.txt AC 1 ms 128 KiB
subtask_1_32.txt AC 3 ms 256 KiB
subtask_1_33.txt AC 110 ms 384 KiB