Submission #143654

#TimeUsernameProblemLanguageResultExecution timeMemory
143654vladciuperceanuMate (COCI18_mate)C++14
100 / 100
546 ms56824 KiB
#include <cstdio> #include <cstring> #define MOD 1000000007 using namespace std; long long Q,d,i,j,comb[2005][2005],D[2005][30][30]; long long r[2005][30],poz[30][2005],sol[2005][30][30]; char s[2005],x,y; int main() { scanf("%s", (s+1)); int n = strlen((s+1)); comb[0][0] = 1; for (i=1; i<=n; i++) { comb[i][0] = comb[i][i] = 1; for (j=1; j<i; j++) { comb[i][j] = comb[i-1][j-1]+comb[i-1][j]; if (comb[i][j] >= MOD) comb[i][j] -= MOD; } } for (i=1; i<=n; i++) poz[s[i]-'a'][++poz[s[i]-'a'][0]] = i; for (i=n; i>=1; i--) for (j=0; j<26; j++) if (s[i] == 'a'+j) 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 (int k=0; k<26; k++) if (s[i] == 'a'+j) D[i][j][k] = r[i+1][k]; else D[i][j][k] = D[i+1][j][k]; for (int l=2; l<=n; l++) for (j=0; j<26; j++) for (int t=1; t<=poz[j][0]; t++) { i = poz[j][t]; if (i >= l-1) for (int k=0; k<26; k++) { sol[l][j][k] += (D[i][j][k]*comb[i-1][l-2])%MOD; if (sol[l][j][k] >= MOD) sol[l][j][k] -= MOD; } } scanf("%lld", &Q); for (;Q--;) { scanf("%lld %c %c", &d, &x, &y); printf("%lld\n", sol[d][x-'a'][y-'a']); } return 0; }

Compilation message (stderr)

mate.cpp: In function 'int main()':
mate.cpp:13:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%s", (s+1));
     ~~~~~^~~~~~~~~~~~~
mate.cpp:54:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%lld", &Q);
     ~~~~~^~~~~~~~~~~~
mate.cpp:57:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%lld %c %c", &d, &x, &y);
         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...