C 眼力大作战
Time Limit:1000MS Memory Limit:65535K
题型: 编程题 语言: 无限制
描述
某一天,bsc要给集训队表现出色的cdm和xxy发奖品了,可是bsc只有一件奖品,不能同时分给两个人,所以只能想个办法来决定谁来领奖品了。
Bsc给了一张表格,里面填满了各种大写字母,要求从里面找出一个正方形,其中正方形的左上顶点对应字符S,右上顶点对应字符C,左下顶点
对应字符A,右下顶点对应U,并且在该正方形区域内存在一个三角形,其中位置(i,j)对应字符A,(i+1,j-1)对应字符C,(i+1,j+1)对应字符M。
谁先找到呢,就算谁获胜了。但是呢,由于xxy最近要忙于期末复习了,所以没有时间处理这种小问题,但是xxy还是很希望能拿到奖品的,
所以只能求助未来的Acmer,你啦!
输入格式
第一行一个整数T,表示样例数
第二行两个整数n, m,分别表示bsc给的表格的行数和列数 1 <= n <= 15, 1 <= m <= 15
第三到n + 2行,每一行是m个大写字母
输出格式
输出T行,若表格中符合上述要求,输出 ”Yes”, 否则输出”No” (不包括双引号)
输入样例
2
3 3
SAC
CMM
AMU
7 5
MUSUB
SSMSS
CMXUU
UCSCC
MACCA
ACCMM
SUGCM
输出样例
Yes
No
Hint
none
Provider
201430320231
简单题,直接照着题意坐,小心点就能过
#include<stdio.h>
char a[16][16];
int main()
{
int T,i,j,d;
scanf("%d",&T);
int n,m;
while(T--)
{
int p=0;
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
scanf("%s",&a[i]);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(a[i][j]=='S'&&i<n-2&&j<m-2)
{
for(d=j;d<m;d++)
{
if(a[i][d]=='C'&&a[i+d-j][j]=='A'&&a[i+d-j][d]=='U')
{
for(int zs=i;zs<i+d-j;zs++)
{
for(int zx=j;zx<d;zx++)
{
if(a[zs][zx]=='A'&&a[zs+1][zx-1]=='C'&&a[zs+1][zx+1]=='M'&&zs+1<=i+d-j&&zx-1>=j&&zx+1<=d)
{
p=1;
break;
}
}
if(p)
break;
}
}
if(p)
break;
}
if(p)
break;
}
}
if(p)
break;
}
if(p)
printf("Yes\n");
else
printf("No\n");
}
}