Submission #707792

#TimeUsernameProblemLanguageResultExecution timeMemory
707792TAhmed33Mate (COCI18_mate)C++98
0 / 100
52 ms66360 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
vector <int> arr;
int n;
int dp[26][26][2001] = {};
const int MOD = 1e9 + 7;
int ncr[2001][2001];
signed main () {
	for (int i = 0; i <= 2000; i++) {
		for (int j = 0; j <= 2000; j++) {
			if (j == 0 || j == i) {
				ncr[i][j] = 1;
			} else if (i < j) {
				ncr[i][j] = 0;
			} else {
				ncr[i][j] = ncr[i - 1][j] + ncr[i - 1][j - 1];
				ncr[i][j] %= MOD;
			}
		}
	}
	string s;
	cin >> s;
	n = s.length();
	arr.push_back(8);
	for (int i = 0; i < n; i++) {
		arr.push_back(s[i] - 'a');
	}
	for (int i = 1; i <= n - 1; i++) {
		for (int j = i + 1; j <= n; j++) {
			for (int k = 2; k <= i + 1; k++) {
				dp[k][arr[i]][arr[j]] += ncr[i - 1][i + 1 - k];
				dp[k][arr[i]][arr[j]] %= MOD;
			}
		}
	}
	int q;
	cin >> q;
	while (q--) {
		int d;
		char a, b;
		cin >> d >> a >> b;
		int x = a - 'a';
		int y = b - 'a';
		cout << dp[d][x][y] << '\n';
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...