ZOJ-1804

来源:互联网 发布:怎样申请淘宝店铺 编辑:程序博客网 时间:2024/05/16 10:55

蛋疼无比的推箱子模拟题,又写了我好久。。代码又烂又长,还好一次A了。。

#include<stdio.h>#include<string.h>static int h, w, a[20][20];static int min(int aa, int bb){return aa < bb ? aa : bb;}static int maxr(){int i, j, res = 0, sum;for (i = 0; i < h; i++){sum = 0;for (j = 0; j < w; j++)if (a[i][j])sum++;if (sum > res)res = sum;}return res;}static int maxc(){int i, j, res = 0, sum;for (j = 0; j < w; j++){sum = 0;for (i = 0; i < h; i++)if (a[i][j])sum++;if (sum > res)res = sum;}return res;}static void move(char *s, int m){int i, j;if (strcmp(s, "down") == 0){m = min(h - maxc(), m);for (j = 0; j < w; j++){int total = 0;for (i = 0; i < m; i++)if (a[i][j]){total++;a[i][j] = 0;}if (total){int empty = 0;for (i = m; i < h; i++){if (a[i][j])total++;empty++;a[i][j] = 1;if (empty == total)break;}}}}else if (strcmp(s, "left") == 0){m = min(w - maxr(), m);for (i = 0; i < h; i++){int total = 0;for (j = w - m; j < w; j++)if (a[i][j]){total++;a[i][j] = 0;}if (total){int empty = 0;for (j = w - m - 1; j >= 0; j--){if (a[i][j])total++;empty++;a[i][j] = 1;if (empty == total)break;}}}}else if (strcmp(s, "up") == 0){m = min(h - maxc(), m);for (j = 0; j < w; j++){int total = 0;for (i = h - m; i < h; i++)if (a[i][j]){total++;a[i][j] = 0;}if (total){int empty = 0;for (i = h - m - 1; i >= 0; i--){if (a[i][j])total++;empty++;a[i][j] = 1;if (empty == total)break;}}}}else{m = min(w - maxr(), m);for (i = 0; i < h; i++){int total = 0;for (j = 0; j < m; j++)if (a[i][j]){total++;a[i][j] = 0;}if (total){int empty = 0;for (j = m; j < w; j++){if (a[i][j])total++;empty++;a[i][j] = 1;if (empty == total)break;}}}}}static void print(int c){int i, j;printf("Data set %d ends with boxes at locations", c);for (i = 0; i < h; i++)for (j = 0; j < w; j++)if (a[i][j])printf(" (%d,%d)", i, j);puts(".");}int main(){int count = 1;while (scanf("%d %d", &h, &w), h || w){int n, i, ri, ci;scanf("%d", &n);memset(a, 0, sizeof(a));for (i = 0; i < n; i++){scanf("%d %d", &ri, &ci);a[ri][ci] = 1;}char s[10];int m;while (scanf("%s", s), strcmp(s, "done")){scanf("%d", &m);move(s, m);}print(count++);}return 0;}


0 0
原创粉丝点击