1006_ac.cpp

来自「我的URAL的1000 ~ 1050 的全部代码 包含WA 最后AC的程序 有2」· C++ 代码 · 共 86 行

CPP
86
字号
#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 + =
减小字号Ctrl + -
显示快捷键?