Submission #116195

#TimeUsernameProblemLanguageResultExecution timeMemory
116195tmwilliamlin168Osmosmjerka (COCI17_osmosmjerka)C++14
140 / 160
4089 ms20704 KiB
#include <bits/stdc++.h> using namespace std; #define ull unsigned long long const int mxN=500, di[8]={0, 1, 1, 1, 0, -1, -1, -1}, dj[8]={-1, -1, 0, 1, 1, 1, 0, -1}, B=29; int n, m, k; string g[mxN]; bool vis[mxN][mxN]; map<ull, ull> mp; ull h[2*mxN*mxN], a1, a2, a3, pB=1; int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> m >> k, k=min(n*m, k); for(int i=0; i<k; ++i) pB*=B; for(int i=0; i<n; ++i) cin >> g[i]; for(int d=0; d<8; ++d) { for(int i=0; i<n; ++i) { for(int j=0; j<m; ++j) { if(vis[i][j]) continue; int a=0; for(int ci=i, cj=j; !vis[ci][cj]; ci=(ci+di[d]+n)%n, cj=(cj+dj[d]+m)%m) { vis[ci][cj]=1; h[++a]=g[ci][cj]-'a'+1; } for(int l=a; l<a+k; ++l) h[l+1]=h[l%a+1]; for(int l=1; l<a+k; ++l) h[l]+=h[l-1]*B; for(int l=0; l<a; ++l) ++mp[h[l+k]-h[l]*pB]; } } memset(vis, 0, sizeof(vis)); } for(auto p : mp) a1+=p.second*p.second; a2=n*m*8, a2*=a2; a3=__gcd(a1, a2); cout << a1/a3 << "/" << a2/a3; }
#Verdict Execution timeMemoryGrader output
Fetching results...