牛吃草问题
题目描述
AA 家里养了一头老黄牛,并且在后院里种了几株草。更精确的说,若把后院视为平面坐标系,并给定两个正整数 N, MN,M,那么在所有满足 1 \le i \le N1≤i≤N 和 1 \le j \le M1≤j≤M 的整数坐标位置 (i, j)(i,j) 都种了一株草。
现在 AA 用一条伸缩能力为 rr 的绳子把老黄牛绑在坐标 (x, y)(x,y) 的位置 (r, x, yr,x,y 必须是整数)。这条绳子很奇特,可以让老黄牛吃到所有坐标在 (i, j)(i,j) 且满足 |x - i| + |y - j| \le r∣x−i∣+∣y−j∣≤r 的草。
另外 AA 希望老黄牛吃尽可能多的草,所以 AA 绑老黄牛的位置一定会满足 r + 1 \le x \le N - rr+1≤x≤N−r 以及 r + 1 \le y \le M - rr+1≤y≤M−r。(为什么这样能使老黄牛吃尽可能多的草呢?请大家自己意会~)
老黄牛非常贪吃,会把所有能吃到的草啃食殆尽,现在给你 AA 家后院被老黄牛啃食完毕的景况,也就是每个坐标 (i, j)(i,j) 的草是否被吃掉。请回答 AA 所使用的绳子的伸缩能力为多少,以及老黄牛被绑的位置坐标。
有办法证明,在此叙述的限制下,可能的答案至多只有一种,且保证给定的数据答案一定存在。
输入描述
第一行有一个正整数 TT (T \le 100T≤100),代表有几组数据。
接着每个数据的第一行有两个正整数 N, MN,M (1 \le N, M \le 201≤N,M≤20) 代表 AA 家后院有种草的坐标范围。接着还有 NN 行,每行有一个长度为 MM 且由 ‘#’ 和 ‘.’ 两种字符组成的字符串,若当中的第 ii 个字符串的第 jj 个字符为 ‘#’,代表坐标在 (i, j)(i,j) 的草没被老黄牛吃掉;相对的,若为 ‘.’,则代表该坐标的草被老黄牛吃掉了。
输出描述
对于每组数据,输出一行包含三个整数 r, x, yr,x,y 代表绳子的伸缩能力和老黄牛被绑的坐标位置。
样例输入 1
3
5 6
###.##
##…#
#…
##…#
###.##
4 3
##.
1 1
.
样例输出 1
2 3 4
0 3 3
0 1 1
C语言代码:
#include<stdio.h>
int main()
{
int n, s, h, i, j, k;
scanf("%d", &n);
while (n)
{
int max = 0, z1 = 0, z2 = 0, rs =0, rh =0, r;
char arr[20][20];
n--;
scanf("%d %d", &s,&h);
for (i = 0; i<s; i++)
{
getchar();
for (j = 0; j < h; j++)
arr[i][j] = getchar();
}
for (i = 0; i < s; i++)
{
for (j = 0; j < h; j++)
{
if (arr[i][j] == '.')
{
z1 = j; //记录.开始出现的行位置
z2 = j;//记录.结尾的行位置
r = 0;//半径媒介
for (j++; j<h; j++)
{
if (arr[i][j] == '.')
{
z2 = j;
r++;
}
else
j = h;
}
j = z2;
if (r/2>=max)
{
max = r/2;//存最大半径
rs = (z1 + z2)/ 2;//存最大半径的竖数
rh = i;//存最大半径的行数
}
}
}
}
printf("%d %d %d\n", max,rh+1,rs+1);
}
}
文章最后发布于: 2019-04-28 23:19:08
相关阅读
著作权法:https://www.66law.cn/tiaoli/14.aspx信息网络传播权保护条例:http://www.hncfs.edu.cn/wlxxzx/page.asp?ID=15334&class=
A5创业网(公众号:iadmin5)7月25日报道,近日途牛内部员工爆料称,途牛目前针对本部门(国内客服部)降薪,单方面给客服降低提成点,由原来4.5%的
最近要做一个组件,即接收客户端的请求,经过一系列的封装,将请求发送给真正的服务端器。可以理解为:客户端使用Http的Request的Body存
电影版《放牛班的春天》是我心中最温暖的角落,每次听到那熟悉的旋律心里都会觉得无比温暖,所以音乐剧版门票一开售我就在票牛网下单
我们每个人都在不停的学习寻求解决问题的方法论,包括我自己也是。但当我对学习的知识进行反思的时候,发现学习的大部分方法论对于解