문제
링크
풀이
#include <iostream>
#include <vector>
using namespace std;
bool check(int ni, int mj, const vector<vector<char>> &v, int n, int m) {
for (int i=0; i<n; i++) for (int j=0; j<m; j++) for (int k=0; k<ni/n; k++) for (int l=0; l<mj/m; l++) {
if (v[i*ni/n+k][j*mj/m+l] != v[i*ni/n][j*mj/m]) return false;
}
return true;
}
void solve(void) {
int ni, mj; cin >> ni >> mj;
vector<vector<char>> v(ni, vector<char>(mj));
for (int i=0; i<ni; i++) for (int j=0; j<mj; j++) cin >> v[i][j];
pair<int, int> ans = {1000, 1000};
for (int i=1; i<=ni; i++) for (int j=1; j<=mj; j++) {
if (ni % i || mj % j) continue;
if (check(ni, mj, v, i, j) && i * j < ans.first * ans.second) ans = {i, j};
}
cout << ans.first << " " << ans.second << "\n";
for (int i=0; i<ans.first; i++) {
for (int j=0; j<ans.second; j++) {
cout << v[i*ni/ans.first][j*mj/ans.second];
}
cout << "\n";
}
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(nullptr);
solve();
return 0;
}