Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # include <bits/stdc++.h>
- using namespace std;
- ifstream f("rodiezv.in");
- ofstream g("rodiezv.out");
- int N, M, Max, K, nr, lat;
- struct rotromb
- {
- int l, c;
- int x, y;
- } v[50101];
- char s[2003];
- int S1[2002][2002], S2[2002][2002];
- int A[2002][2002];
- bool cmp(rotromb x, rotromb y)
- {
- if(x.l == y.l)
- return x.c < y.c;
- return x.l < y.l;
- }
- int verif_contur(int i, int j, int k)
- {
- int s1 = S1[i+k-1][j+k-1] - S1[i][j];
- int s2 = S1[i+2*(k-1)][j] - S1[i+k-1][j-k+1];
- int s3 = S2[i+k-1][j-k+1] - S2[i][j];
- int s4 = S2[i+2*(k-1)][j] - S2[i+k-1][j+k-1];
- return (s1 > 0 && s2 > 0 && s3 > 0 && s4 > 0);
- }
- int latura(int i)
- {
- rotromb a, b;
- a = v[i];
- b = v[i+1];
- int lat = b.c - a.c; /// latura posibilului romb
- for(int j=i+2; j<K; ++j)
- {
- if(v[j].l == v[j+1].l && v[j].c == a.c && v[j+1].c == b.c)
- {
- if (v[j].l - a.l == lat)
- {
- int k = (lat+2) / 2;
- if (verif_contur(b.x, b.y, k) && k > 2)
- {
- nr++;
- return (lat + 2) / 2;
- }
- }
- }
- else if (a.c <= v[j].c && v[j].c <= b.c) return 0;
- }
- return 0;
- }
- int main()
- {
- int i, j;
- ios_base::sync_with_stdio(false);
- cin.tie(0);
- f >> N;
- for(i=1; i<=N; i++)
- {
- f >> s;
- for(j=1; j<=N; j++)
- {
- S1[i][j] = S1[i-1][j-1];
- S2[i][j] = S2[i-1][j+1];
- if (s[j-1] == '#') v[++K] = {i+j-1, N-i+j, i, j};
- if (strchr("aeiou",s[j-1]))
- {
- S1[i][j] += 1;
- S2[i][j] += 1;
- }
- }
- }
- sort(v+1, v+K+1, cmp);
- for(i=1; i<=K; i++)
- {
- if (v[i].l == v[i+1].l)
- {
- lat = latura(i);
- if (lat > 0)
- Max = max(Max, lat);
- }
- }
- g << nr << "\n" << Max << "\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement