제출 #145136

#제출 시각아이디문제언어결과실행 시간메모리
145136radugheoMate (COCI18_mate)C++14
80 / 100
2057 ms60328 KiB
#include <bits/stdc++.h> #define MOD 1000000007 using namespace std; long long l, i, j, q, k, a, x, p; long long r[2005][30], c[2005][2005]; long long d[2005][30][30], sol[2005][30][30]; char y, z, s[2005]; vector <long long> v[30]; int main(){ cin >> (s + 1); l = strlen(s+1); c[0][0] = 1; for (i=1; i<=l; 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<=l; i++){ v[s[i] - 'a'].push_back(i); } for (i=l; 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=l; i>=1; i--){ for (j=0; j<26; j++){ for (q=0; q<26; q++){ if (s[i] == j + 'a'){ d[i][j][q] = r[i+1][q]; } else{ d[i][j][q] = d[i+1][j][q]; } } } } for (i=2; i<=l; i++){ for (j=0; j<26; j++){ for (q=0; q<v[j].size(); q++){ p = v[j][q]; if (p >= i - 1){ for (k=0; k<26; k++){ sol[i][j][k] += ((d[p][j][k] * c[p-1][i-2])%MOD); if (sol[i][j][k] >= MOD) sol[i][j][k] -= MOD; } } } } } cin >> a; for (i=1; i<=a; i++){ cin >> x >> y >> z; cout << sol[x][y-'a'][z-'a'] << "\n"; } return 0; }

컴파일 시 표준 에러 (stderr) 메시지

mate.cpp: In function 'int main()':
mate.cpp:53:24: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             for (q=0; q<v[j].size(); q++){
                       ~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...