# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
145103 | MihneaHedea | Mate (COCI18_mate) | C++14 | 589 ms | 53752 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <cstdio>
#include <cstring>
#include <vector>
#define MOD 1000000007
using namespace std;
char p, u, s[2002];
long long R[2002][26];
long long D[2002][26][26], sol[2002][26][26];
long long C[2002][2002];
vector<long long> poz[26];
long long n, i, j, k, t, L;
int main () {
scanf("%s", s+1);
n = strlen(s+1);
C[0][0] = 1;
for (i=1;i<=n;i++) {
C[i][0] = 1;
for (j=1;j<=i;j++) {
C[i][j] = (C[i-1][j-1] + C[i-1][j]);
if (C[i][j] >= MOD)
C[i][j] -= MOD;
}
}
for (i=1;i<=n;i++)
poz[s[i]-'a'].push_back(i);
for (i=n;i>=1;i--) {
for (j=0;j<26;j++)
if (s[i] == j+'a') {
R[i][j] = 1 + R[i+1][j];
}
else {
R[i][j] = R[i+1][j];
}
}
for (i=n;i>=1;i--) {
for (j=0;j<26;j++)
for (k=0;k<26;k++)
if (s[i] == j+'a')
D[i][j][k] = /**D[i+1][j][k] +**/ R[i+1][k];
else
D[i][j][k] = D[i+1][j][k];
}
for (L=2;L<=n;L++)
for (j=0;j<26;j++)
for (t=0;t<poz[j].size();t++) {
i=poz[j][t];
if (i >= L-1)
for (k=0;k<26;k++) {
sol[L][j][k] += ((D[i][j][k] * C[i-1][L-2])%MOD);
if (sol[L][j][k] >= MOD)
sol[L][j][k] -= MOD;
}
}
scanf("%lld", &t);
for (;t--;) {
scanf("%lld %c %c", &L, &p, &u);
printf("%lld\n", sol[L][p-'a'][u-'a']);
}
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |