結果
| 問題 |
No.460 裏表ちわーわ
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-12-11 09:30:07 |
| 言語 | C90 (gcc 12.3.0) |
| 結果 |
AC
|
| 実行時間 | 46 ms / 2,000 ms |
| コード長 | 1,331 bytes |
| コンパイル時間 | 143 ms |
| コンパイル使用メモリ | 21,888 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-11-29 03:04:36 |
| 合計ジャッジ時間 | 1,620 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 28 |
コンパイルメッセージ
main.c: In function ‘main’:
main.c:75:9: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
75 | scanf("%d %d",&m,&n);
| ^~~~~~~~~~~~~~~~~~~~
main.c:78:25: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
78 | scanf("%d",&a[i][j]);
| ^~~~~~~~~~~~~~~~~~~~
ソースコード
#include<stdio.h>
int a[8][8],n,m;
int dx[9]={-1,0,1,1,1,0,-1,-1,0};
int dy[9]={-1,-1,-1,0,1,1,1,0,0};
void reverse(int x,int y){
int i;
for(i=0;i<9;i++){
if(0<=dx[i]+x && dx[i]+x<m && 0<=dy[i]+y && dy[i]+y<n){
a[dx[i]+x][dy[i]+y]^=1;
}
}
}
void print(){
int i,j;
for(i=0;i<m;i++){
for(j=0;j<n;j++){
printf("%d ",a[i][j]);
}
printf("\n");
}
printf("-\n");
}
int search(int i,int j){
int min=65,p,c;
if(i==0){
if(j<m){
p=search(i,j+1);
min=(p<min)?p:min;
reverse(m-j-1,0);
p=1+search(i,j+1);
min=(p<min)?p:min;
reverse(m-j-1,0);
}else if(j<n+m-1){
p=search(i,j+1);
min=(p<min)?p:min;
reverse(0,j-m+1);
p=1+search(i,j+1);
min=(p<min)?p:min;
reverse(0,j-m+1);
}else{
return search(1,1);
}
}else if(i==m){
for(c=0;c<n;c++){
if(a[m-1][c]==1) return min;
}
return 0;
}else{
if(j==n){
for(c=0;c<n;c++){
if(a[i-1][c]==1) return min;
}
return search(i+1,1);
}else{
if(a[i-1][j-1]==1){
reverse(i,j);
p=1+search(i,j+1);
min=(p<min)?p:min;
reverse(i,j);
}else{
return search(i,j+1);
}
}
}
return min;
}
int main(){
int i,j;
scanf("%d %d",&m,&n);
for(i=0;i<m;i++){
for(j=0;j<n;j++){
scanf("%d",&a[i][j]);
}
}
i=search(0,0);
if(i>64) printf("Impossible\n");
else printf("%d\n",i);
return 0;
}