Codeforces 965B 题解报告

比眉伴天荒 2022-05-26 09:46 273阅读 0赞

一、题目

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)

三、程序

  1. n, k = map(int, input().split())
  2. a = []
  3. for i in range(n):
  4. a.append(input())
  5. maxans = 0
  6. xans = 0
  7. yans = 0
  8. for i in range(n):
  9. for j in range(n):
  10. curans = 0
  11. up = 0
  12. while up < k and i - up >= 0 and a[i - up][j] == '.':
  13. up += 1
  14. down = 0
  15. while down < k and i + down < n and a[i + down][j] == '.':
  16. down += 1
  17. curans += max(0, down + up - k)
  18. if k != 1:
  19. left = 0
  20. while left < k and j - left >= 0 and a[i][j - left] == '.':
  21. left += 1
  22. right = 0
  23. while right < k and j + right < n and a[i][j + right] == '.':
  24. right += 1
  25. curans += max(0, right + left - k)
  26. if curans > maxans:
  27. maxans = curans
  28. xans = i
  29. yans = j
  30. print(xans + 1, yans + 1)

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

发表评论

表情:
评论列表 (有 0 条评论,273人围观)

还没有评论,来说两句吧...

相关阅读