結果

問題 No.460 裏表ちわーわ
ユーザー くれちーくれちー
提出日時 2016-12-11 02:06:03
言語 C90
(gcc 11.4.0)
結果
TLE  
実行時間 -
コード長 1,721 bytes
コンパイル時間 222 ms
コンパイル使用メモリ 25,344 KB
実行使用メモリ 15,560 KB
最終ジャッジ日時 2024-11-29 02:57:04
合計ジャッジ時間 61,673 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 61 ms
13,632 KB
testcase_01 AC 44 ms
8,612 KB
testcase_02 TLE -
testcase_03 AC 0 ms
8,612 KB
testcase_04 AC 1 ms
13,636 KB
testcase_05 TLE -
testcase_06 TLE -
testcase_07 TLE -
testcase_08 TLE -
testcase_09 AC 271 ms
13,636 KB
testcase_10 TLE -
testcase_11 TLE -
testcase_12 TLE -
testcase_13 TLE -
testcase_14 TLE -
testcase_15 TLE -
testcase_16 TLE -
testcase_17 TLE -
testcase_18 TLE -
testcase_19 TLE -
testcase_20 TLE -
testcase_21 TLE -
testcase_22 TLE -
testcase_23 TLE -
testcase_24 TLE -
testcase_25 AC 1 ms
6,816 KB
testcase_26 AC 1 ms
6,816 KB
testcase_27 WA -
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.c: In function ‘main’:
main.c:73:9: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   73 |         scanf("%d %d", &m, &n);
      |         ^~~~~~~~~~~~~~~~~~~~~~
main.c:79:25: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   79 |                         scanf("%d", &board[i][j]);
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~

ソースコード

diff #

#include <stdio.h>
#include <math.h>

const int dx[9] = { -1,0,1,-1,0,1,-1,0,1 };
const int dy[9] = { -1,-1,-1,0,0,0,1,1,1 };

void turn(int b[9][9], int m, int n, int x, int y) {
	int i;
	for (i = 0; i < 9; i++) {
		if (x + dx[i] >= 0 && y + dy[i] >= 0)
			b[x + dx[i]][y + dy[i]] = !b[x + dx[i]][y + dy[i]];
	}
	return;
}

void turnall(int b[9][9], int m, int n, int a[9][9]) {
	int i, j;
	for (i = 0; i < m; i++) {
		for (j = 0; j < n; j++) {
			if (a[i][j]) turn(b, m, n, i, j);
		}
	}
	return;
}

int cnton(int b[9][9], int m, int n) {
	int i, j, s = 0;
	for (i = 0; i < m; i++) {
		for (j = 0; j < n; j++) {
			s += b[i][j];
		}
	}
	return s;
}

int check(int b[9][9], int m, int n) {
	int i, j;
	for (i = 0; i < m; i++) {
		for (j = 0; j < n; j++) {
			if (b[i][j] != 0) return 0;
		}
	}
	return 1;
}

int getbit(int x, int n) {
	return !!(x & (int)pow(2, n - 1));
}

void copy(int b[9][9], int b2[9][9], int m, int n) {
	int i, j;
	for (i = 0; i < m; i++) {
		for (j = 0; j < n; j++) {
			b2[i][j] = b[i][j];
		}
	}
	return;
}

void getbitmap(int b[9][9], int m, int n, int t) {
	int i, j, k, l, tmp[64];
	for (i = 0; i < m * n; i++) tmp[i] = getbit(t, i + 1);
	for (i = 0; i < m; i++) {
		for (j = 0; j < n; j++) {
			b[i][j] = tmp[i * n + j];
		}
	}
	return;
}

int main() {
	int m, n;
	scanf("%d %d", &m, &n);

	int board[9][9];
	int i, j, k;
	for (i = 0; i < m; i++) {
		for (j = 0; j < n; j++) {
			scanf("%d", &board[i][j]);
		}
	}

	int ans[9][9], board_[9][9];
	for (i = 0; i < pow(2, m * n); i++) {
		copy(board, board_, m, n);
		getbitmap(ans, m, n, i);
		turnall(board_, m, n, ans);
		if (check(board_, m, n)) {
			printf("%d\n", cnton(ans, m, n));
			return 0;
		}
	}
	puts("Impossible");
	return 0;
}
0