Codeforces 965B 题解报告

一、题目

http://codeforces.com/contest/965/problem/B

二、分析

当k = 1时,取第一个’.’的坐标即可
当k > 1时,需要求出每一个点在上下左右四个方向所能到达的最远处,记为up, down, left, right,再取上下方向和左右方向的和的最大值,即
max(0, up + down - k) + max(0, left + right - k)

三、程序

n, k = map(int, input().split())
a = []
for i in range(n):
    a.append(input())

maxans = 0
xans = 0
yans = 0

for i in range(n):
    for j in range(n):
        curans = 0
        up = 0
        while up < k and i - up >= 0 and a[i - up][j] == '.':
            up += 1
        down = 0
        while down < k and i + down < n and a[i + down][j] == '.':
            down += 1
        curans += max(0, down + up - k)

        if k != 1:
            left = 0
            while left < k and j - left >= 0 and a[i][j - left] == '.':
                left += 1
            right = 0
            while right < k and j + right < n and a[i][j + right] == '.':
                right += 1
            curans += max(0, right + left - k)

        if curans > maxans:
            maxans = curans
            xans = i
            yans = j

print(xans + 1, yans + 1)


TopCoder & Codeforces & AtCoder交流QQ群:648202993
更多内容请关注微信公众号
wechat_public.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值