CodeForces-816C Karen and Game 水題
阿新 • • 發佈:2018-11-26
CodeForces-816C Karen and Game
題意: 給定一個矩陣, 可以把一個全是0的矩陣通過給一行或一列加1到達這個矩形, 問方式(spical judge), 若不能輸出-1.
分析: 純暴力模擬一下, 矩陣的大小不超過100.
程式碼:
#include <iostream> #include <cstdio> using namespace std; const int MAXN = 105; int a[MAXN * MAXN * MAXN], f[MAXN * MAXN * MAXN], g[MAXN][MAXN]; int main() { int n, m; scanf("%d%d", &n, &m); for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) scanf("%d", &g[i][j]); int cnt = 0; int flag2 = 0; if (n < m) { while (flag2 < n) { flag2 = 0; for (int i = 0; i < n; i++) { bool flag = true; for (int j = 0; j < m; j++) if (!g[i][j]) { flag = false; break; } if (flag) { for (int j = 0; j < m; j++) { g[i][j]--; } f[++cnt] = 0; a[cnt] = i; } if (!flag) flag2++; } // cout << flag2 << endl; } flag2 = 0; while (flag2 < m) { flag2 = 0; for (int i = 0; i < m; i++) { bool flag = true; for (int j = 0; j < n; j++) if (!g[j][i]) { flag = false; break; } if (flag) { for (int j = 0; j < n; j++) { g[j][i]--; } f[++cnt] = 1; a[cnt] = i; } if (!flag) flag2++; } } } else { flag2 = 0; while (flag2 < m) { flag2 = 0; for (int i = 0; i < m; i++) { bool flag = true; for (int j = 0; j < n; j++) if (!g[j][i]) { flag = false; break; } if (flag) { for (int j = 0; j < n; j++) { g[j][i]--; } f[++cnt] = 1; a[cnt] = i; } if (!flag) flag2++; } } flag2 = 0; while (flag2 < n) { flag2 = 0; for (int i = 0; i < n; i++) { bool flag = true; for (int j = 0; j < m; j++) if (!g[i][j]) { flag = false; break; } if (flag) { for (int j = 0; j < m; j++) { g[i][j]--; } f[++cnt] = 0; a[cnt] = i; } if (!flag) flag2++; } // cout << flag2 << endl; } } bool flag = true; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (g[i][j]) { flag = false; break; } } } if (!flag) { cout << -1 << endl; } else { cout << cnt << endl; for (int i = 1; i <= cnt; i++) { if (!f[i]) cout << "row "; else cout << "col "; cout << a[i] + 1 << endl; } } return 0; }