Submission #141662

#TimeUsernameProblemLanguageResultExecution timeMemory
141662mariusnicoliMate (COCI18_mate)C++14
0 / 100
425 ms49656 KiB
///#include <fstream> #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; ///ifstream cin ("mate.in"); ///ofstream cout("mate.out"); int main () { scanf("%s", s+1); ///cin>>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=0;i<26;i++) /// Last[i] = n+1; 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]; /// Last[j] = i; } else { R[i][j] = R[i+1][j]; /// Last[j] = Last[j+1]; } } 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; } } ///cin>>t; scanf("%lld", &t); for (;t--;) { scanf("%lld %lld %lld", &L, &p, &u); ///cin>>L>>p>>u; printf("%lld\n", sol[L][p-'a'][u-'a']); ///cout<<sol[L][p-'a'][u-'a']<<"\n"; } return 0; }

Compilation message (stderr)

mate.cpp: In function 'int main()':
mate.cpp:58:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             for (t=0;t<poz[j].size();t++) {
                      ~^~~~~~~~~~~~~~
mate.cpp:72:43: warning: format '%lld' expects argument of type 'long long int*', but argument 3 has type 'char*' [-Wformat=]
         scanf("%lld %lld %lld", &L, &p, &u);
                                     ~~    ^
mate.cpp:72:43: warning: format '%lld' expects argument of type 'long long int*', but argument 4 has type 'char*' [-Wformat=]
mate.cpp:16:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%s", s+1);
     ~~~~~^~~~~~~~~~~
mate.cpp:70:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%lld", &t);
     ~~~~~^~~~~~~~~~~~
mate.cpp:72:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%lld %lld %lld", &L, &p, &u);
         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...