Submission #14198

# Submission time Handle Problem Language Result Execution time Memory
14198 2015-05-04T12:19:37 Z ainta 선다형 시험 (TOKI14_multiple) C++
100 / 100
325 ms 1184 KB
#include<stdio.h>
int n, P1, P2, w[2][5], C[2], D[5][2010], DD[2][2010];
int a1[2010], a2[2010];
long long Mod = 1000000007, F[2010], invF[2010];
long long Pow(long long a, long long b){
	long long r = 1;
	while (b){
		if (b % 2)r = r*a%Mod;
		a = a*a%Mod;
		b /= 2;
	}
	return r;
}
long long Comb(int a, int b){
	return F[a] * invF[b] % Mod*invF[a - b] % Mod;
}
void DP(int pv){
	int i, j, k;
	D[0][0] = 1;
	for (i = 1; i <= 4; i++){
		for (j = 0; j <= n; j++){
			if (!D[i - 1][j])continue;
			for (k = 0; k <= w[pv][i]; k++){
				D[i][j + k] = (D[i][j+k] + Comb(w[pv][i], k)*Pow(i, k) % Mod * D[i - 1][j]) % Mod;
			}
			D[i - 1][j] = 0;
		}
	}
	for (i = 0; i <= n; i++){
		DD[pv][i] = D[4][i];
		D[4][i] = 0;
	}
}
int main(){
	char pp[20];
	scanf("%d%d%d", &n, &P1, &P2);
	int i, c, j;
	long long Res = 0;
	for (i = 1; i <= n; i++){
		scanf("%s", pp);
		a1[i] = pp[0] - 'a';
	}
	for (i = 1; i <= n; i++){
		scanf("%s", pp);
		a2[i] = pp[0] - 'a';
	}
	for (i = 1; i <= n; i++){
		scanf("%s", pp);
		c = 0;
		for (j = 0; j < 5; j++){
			if (pp[j] != '.')c++;
		}
		if (a1[i] == a2[i]){
			C[0]++;
			w[0][c - 1]++;
		}
		else{
			C[1]++;
			w[1][c - 2]++;
		}
	}
	F[0] = invF[0] = 1;
	for (i = 1; i <= n; i++){
		F[i] = F[i - 1] * i%Mod;
		invF[i] = Pow(F[i], Mod - 2);
	}
	DP(0);
	DP(1);
	for (i = 0; i <= P1&&i <= P2 && i <= C[0]; i++){
		if (C[1] < P1 + P2 - i * 2)continue;
		Res = (Res + DD[0][C[0] - i] * Comb(P1 + P2 - i * 2, P1 - i) % Mod * DD[1][C[1] - (P1 + P2 - i * 2)]) % Mod;
	}
	printf("%lld\n", Res);
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 1184 KB Output is correct
2 Correct 0 ms 1184 KB Output is correct
3 Correct 0 ms 1184 KB Output is correct
4 Correct 0 ms 1184 KB Output is correct
5 Correct 0 ms 1184 KB Output is correct
6 Correct 0 ms 1184 KB Output is correct
7 Correct 0 ms 1184 KB Output is correct
8 Correct 0 ms 1184 KB Output is correct
9 Correct 2 ms 1184 KB Output is correct
10 Correct 0 ms 1184 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 1184 KB Output is correct
2 Correct 0 ms 1184 KB Output is correct
3 Correct 0 ms 1184 KB Output is correct
4 Correct 3 ms 1184 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 7 ms 1184 KB Output is correct
2 Correct 13 ms 1184 KB Output is correct
3 Correct 24 ms 1184 KB Output is correct
4 Correct 38 ms 1184 KB Output is correct
5 Correct 77 ms 1184 KB Output is correct
6 Correct 57 ms 1184 KB Output is correct
7 Correct 94 ms 1184 KB Output is correct
8 Correct 161 ms 1184 KB Output is correct
9 Correct 131 ms 1184 KB Output is correct
10 Correct 325 ms 1184 KB Output is correct