Submission #229547

#TimeUsernameProblemLanguageResultExecution timeMemory
229547Uzumaki_NaturooRima (COCI17_rima)C++14
56 / 140
1060 ms127352 KiB
/// You just can't beat the person who never gives up /// ICPC next year #pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math,O3") #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") #include<bits/stdc++.h> using namespace std ; const int N = 5e5+5 ,M = 3e6+5 ; typedef unsigned long long ull ; const int base = 29 ; int mod[4] = {(int)1e9+9 ,(int)1e9+7 ,(int)1e9-63 ,(int)1e9-71}; struct rabinKarp{ int val[4] ; rabinKarp(){ memset(val,0,sizeof val); } void push_back(int x){ for(int i=0;i<4;++i){ val[i] = (1ll * val[i] * base) %mod[i]; val[i] = (val[i] + x) %mod[i]; } } pair<ull ,ull> hashVal(){ ull a = val[0] ,b = val[2] ; a *= 1e10 ,b *= 1e10 ; a += val[1] ,b += val[3] ; return {a ,b} ; } }; int n ; char str[M] ; vector<pair<ull,ull>> h[N] ; map<pair<ull,ull> ,int> cnt ; set<pair<ull,ull>> all ; int main(){ scanf("%d",&n); for(int i=0;i<n;++i){ scanf("%s",str); int m = strlen(str); reverse(str,str+m) ; rabinKarp rbk ; h[i].push_back(make_pair(0,0)); for(int j=0;j<m;++j){ rbk.push_back(str[j]-'a'+1); h[i].push_back(rbk.hashVal()); } ++cnt[h[i][h[i].size()-2]] ; all.insert(h[i].back()); } int ans = 0 ; for(int i=0;i<n;++i){ int cur = 0 ; while(h[i].size()>=2 && all.count(h[i].back())){ cur += cnt[h[i][h[i].size()-2]] ; h[i].pop_back(); } ans = max(ans ,cur); } printf("%d",ans); return 0; }

Compilation message (stderr)

rima.cpp: In function 'int main()':
rima.cpp:39:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d",&n);
     ~~~~~^~~~~~~~~
rima.cpp:41:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%s",str);
         ~~~~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...