?? 1006_ac.cpp
字號:
#include<stdio.h> #include<stdlib.h>#define width 50#define height 20#define maxk 2000typedef unsigned char xchar;const xcharlu =218,ru =191,lb =192,rb =217,ve =179,ho =196,any ='?';struct SquareList{ int y,x,l;} list[maxk];xchar a[height][width];int i,j,k,l,finish,empty;inline int ok(int y,int x,int l){ if (a[y][x]!=lu&&a[y][x]!=any) return 0; if (a[y][x+l]!=ru&&a[y][x+l]!=any) return 0; if (a[y+l][x]!=lb&&a[y+l][x]!=any) return 0; if (a[y+l][x+l]!=rb&&a[y+l][x+l]!=any) return 0; empty=a[y][x]!=lu&&a[y][x+l]!=ru&&a[y+l][x]!=lb&&a[y+l][x+l]!=rb; return 1;}int check(int y,int x,int l){ int i; for (i=x+1;i<x+l;i++) { if (a[y][i]!=ho&&a[y][i]!=any) return 0; if (a[y][i]==ho) empty=0; if (a[y+l][i]!=ho&&a[y+l][i]!=any) return 0; if (a[y+l][i]==ho) empty=0; } for (i=y+1;i<y+l;i++) { if (a[i][x]!=ve&&a[i][x]!=any) return 0; if (a[i][x]==ve) empty=0; if (a[i][x+l]!=ve&&a[i][x+l]!=any) return 0; if (a[i][x+l]==ve) empty=0; } if (empty) return 0; for (i=x;i<=x+l;i++) a[y][i]=a[y+l][i]=any; for (i=y+1;i<y+l;i++) a[i][x]=a[i][x+l]=any; return 1;}int main(){ for (i=0;i<height;i++) { for (j=0;j<width;j++) scanf("%c",&a[i][j]); scanf("\n"); } while (!finish) { finish=1; for (l=1;l<height;l++) for (i=0;i<height-l;i++) for (j=0;j<width-l;j++) if (ok(i,j,l)) if (check(i,j,l)) { list[k].y=i; list[k].x=j; list[k++].l=l+1; finish=0; } } printf("%d\n",k); while (k--) printf("%d %d %d\n",list[k].x,list[k].y,list[k].l); return 0;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -