#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
using namespace std;
string ile_snu(const vector<string>& czas_pracy, int n, int l) {
for (int xl = 0; xl < l; ++xl) {
bool jest_opieka = false;
for (int xn = 0; xn < n; ++xn) {
if (czas_pracy[xn][xl] == '.') {
jest_opieka = true;
break;
}
}
if (!jest_opieka) {
return "-1";
}
}
for (const auto& element : czas_pracy) {
if (all_of(element.begin(), element.end(), [](char c) { return c == 'X'; })) {
return "0/1";
}
}
vector<int> liczba_kropek;
for (const auto& element : czas_pracy) {
liczba_kropek.push_back(count(element.begin(), element.end(), '.'));
}
int max_kropki = *max_element(liczba_kropek.begin(), liczba_kropek.end());
int min_kropki = *min_element(liczba_kropek.begin(), liczba_kropek.end());
if (max_kropki == 0) {
return "0/1";
}
int nwd = gcd(max_kropki, min_kropki);
return to_string(max_kropki / nwd) + "/" + to_string(min_kropki / nwd);
}
int main() {
int n, l;
cin >> n >> l;
vector<string> czas_pracy(n);
for (int i = 0; i < n; ++i) {
cin >> czas_pracy[i];
}
cout << ile_snu(czas_pracy, n, l) << endl;
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | #include <iostream> #include <vector> #include <algorithm> #include <numeric> using namespace std; string ile_snu(const vector<string>& czas_pracy, int n, int l) { for (int xl = 0; xl < l; ++xl) { bool jest_opieka = false; for (int xn = 0; xn < n; ++xn) { if (czas_pracy[xn][xl] == '.') { jest_opieka = true; break; } } if (!jest_opieka) { return "-1"; } } for (const auto& element : czas_pracy) { if (all_of(element.begin(), element.end(), [](char c) { return c == 'X'; })) { return "0/1"; } } vector<int> liczba_kropek; for (const auto& element : czas_pracy) { liczba_kropek.push_back(count(element.begin(), element.end(), '.')); } int max_kropki = *max_element(liczba_kropek.begin(), liczba_kropek.end()); int min_kropki = *min_element(liczba_kropek.begin(), liczba_kropek.end()); if (max_kropki == 0) { return "0/1"; } int nwd = gcd(max_kropki, min_kropki); return to_string(max_kropki / nwd) + "/" + to_string(min_kropki / nwd); } int main() { int n, l; cin >> n >> l; vector<string> czas_pracy(n); for (int i = 0; i < n; ++i) { cin >> czas_pracy[i]; } cout << ile_snu(czas_pracy, n, l) << endl; return 0; } |
English