Created
March 3, 2019 20:13
-
-
Save vkopichenko/b76bb33b23ddc8f601aac27c12637389 to your computer and use it in GitHub Desktop.
Ты с какого района?!
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// http://dl.gsu.by/task.jsp?nid=1756324&cid=1105 | |
// К области 5-9 (весна)\Область, 5 мая 2011, 4 - 8 кл\10 - "Ты с какого района?!" 103054 Вераксич, Коржик, Тимошков | |
#include "bits/stdc++.h" | |
using namespace std; | |
const int N = 100; | |
int districts[N*N] {0}; // счётчики районов | |
int dcount = 0; | |
int* waste = nullptr; // пустырь | |
int* row[N]; // ссылки на счётчики районов для текущего ряда домов | |
int main() { | |
int n, m; | |
cin >> n >> m; | |
for (int i = 0; i < n; ++i) { | |
for (int j = 0, *left = waste; j < m; left = row[j++]) { | |
int* top = row[j]; | |
char c; | |
cin >> c; | |
if (c == '.') { | |
row[j] = waste; | |
continue; | |
} | |
int dom = c - '0'; | |
if (left == waste && top == waste) { | |
// новый район | |
row[j] = &(districts[dcount++] = dom); | |
} else if (left == waste) { | |
row[j] = top; | |
*top += dom; | |
} else if (top == waste || top == left) { | |
row[j] = left; | |
*left += dom; | |
} else { | |
// слияние районов, левый поглощает верхний | |
row[j] = left; | |
*left += *top + dom; | |
*top = 0; | |
// теперь нужно заменить ссылки в ряду на поглощённый район | |
for (int k = 0; k < m; ++k) if (row[k] == top) row[k] = left; | |
} | |
} | |
cin.ignore(1, '\n'); // перевод строки | |
} | |
int mx = *max_element(districts, districts + dcount); | |
cout << mx; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
http://dl.gsu.by/task.jsp?nid=1756324&cid=1105
К области 5-9 (весна)\Область, 5 мая 2011, 4 - 8 кл\10 - "Ты с какого района?!" 103054 Вераксич, Коржик, Тимошков