Submission #165727

#TimeUsernameProblemLanguageResultExecution timeMemory
165727SenseiLozinke (COCI17_lozinke)C++17
10 / 100
463 ms65540 KiB
#include <bits/stdc++.h> using namespace std; const long long P = 53; const long long MOD = 1e9 + 7; const int MAXN = 2e4; long long add (long long x, long long y) { return ((x % MOD) + (y % MOD)) % MOD; } long long mul (long long x, long long y) { return ((x % MOD) * (y % MOD)) % MOD; } unordered_map<long long, unordered_set<int> > m; string st[MAXN + 7]; bool s[MAXN + 7][MAXN + 7]; int main () { int N; cin >> N; for (int i = 1; i <= N; i++) { cin >> st[i]; } for (int i = 1; i <= N; i++) { long long hash = 0; for (int j = 0; j < st[i].size(); j++) { hash = mul(hash, P); hash = add(hash, st[i][j] - 'a' + 1); } m[hash].insert(i); } long long ans = 0; for (int i = 1; i <= N; i++) { for (int ss = 0; ss < st[i].size(); ss++) { long long hash = 0; for (int j = ss; j < st[i].size(); j++) { if (ss == 0 && j + 1 == st[i].size()) { break; } hash = mul(hash, P); hash = add(hash, st[i][j] - 'a' + 1); if (m.find(hash) != m.end()) { for (int id : m[hash]) { if (id != i) { s[i][id] = s[id][i] = true; } } } } } for (int j = 1; j <= N; j++) { if (s[i][j]) { ans++; } } } long long ans2 = 0; for (int i = 1; i <= N; i++) { long long hash = 0; for (int j = 0; j < st[i].size(); j++) { hash = mul(hash, P); hash = add(hash, st[i][j] - 'a' + 1); } ans2 += m[hash].size() - 1; } ans += ans2; cout << ans << "\n"; return 0; }

Compilation message (stderr)

lozinke.cpp: In function 'int main()':
lozinke.cpp:33:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int j = 0; j < st[i].size(); j++) {
                   ~~^~~~~~~~~~~~~~
lozinke.cpp:45:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int ss = 0; ss < st[i].size(); ss++) {
                    ~~~^~~~~~~~~~~~~~
lozinke.cpp:48:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for (int j = ss; j < st[i].size(); j++) {
                     ~~^~~~~~~~~~~~~~
lozinke.cpp:49:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if (ss == 0 && j + 1 == st[i].size()) {
                    ~~~~~~^~~~~~~~~~~~~~~
lozinke.cpp:78:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int j = 0; j < st[i].size(); j++) {
                   ~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...