AtCoder Beginner Contest 391个人题解(A-F)

A - Lucky Direction

Time Limit: 2 sec / Memory Limit: 1024 MB

Problem Statement

You are given a string DDD representing one of the eight directions (north, east, west, south, northeast, northwest, southeast, southwest). The correspondence between the directions and their representing strings is as follows.

  • North: N
  • East: E
  • West: W
  • South: S
  • Northeast: NE
  • Northwest: NW
  • Southeast: SE
  • Southwest: SW

Print the string representing the direction opposite to the direction denoted by DDD.

给你一个字符串 DDD 代表八个方向(北、东、西、南、东北、西北、东南、西南)之一。方向与其代表字符串之间的对应关系如下。

  • N
  • 东:`E
  • 西: W
  • 南: S
  • 东北: NE
  • 西北: NW
  • 东南:`SE
  • 西南: SW

打印与 DDD 表示的方向相反的字符串。

Constraints

  • DDD is one of N, E, W, S, NE, NW, SE, SW.

  • DDDNEWSNENWSESW 中的一个。

题解

DDD 中的 N 替换为 SS 替换为 NE 替换为 WW 替换为 E 即可。

s = input()
ns = ''
for i in s:
    if i == 'N':
        ns += 'S'
    elif i=='S':
        ns += 'N'
    elif i=='W':
        ns += 'E'
    else:
        ns += 'W'
print(ns)

B - Seek Grid

Time Limit: 2 sec / Memory Limit: 1024 MB

Problem Statement

You are given an N×NN \times NN×N grid SSS and an M×MM \times MM×M grid TTT. The cell at the iii-th row from the top and the jjj-th column from the left is denoted by (i,j)(i,j)(i,j).

The colors of the cells in SSS and TTT are represented by N2N^2N2 characters Si,jS_{i,j}Si,j (1≤i,j≤N1\leq i,j\leq N1i,jN) and M2M^2M2 characters Ti,jT_{i,j}Ti,j (1≤i,j≤M1\leq i,j\leq M1i,jM), respectively. In grid SSS, cell (i,j)(i,j)(i,j) is white if Si,jS_{i,j}Si,j is ., and black if Si,jS_{i,j}Si,j is #. The same applies for grid TTT.

Find TTT within SSS. More precisely, output integers aaa and bbb (1≤a,b≤N−M+11 \leq a,b \leq N-M+11a,bNM+1) that satisfy the following condition:

  • Sa+i−1,b+j−1=Ti,jS_{a+i-1,b+j-1} = T_{i,j}Sa+i1,b+j1=Ti,j for every i,ji,ji,j (1≤i,j≤M1\leq i,j \leq M1i,jM).

给你一个 N×NN \times NN×N 网格 SSS 和一个 M×MM \times MM×M 网格 TTT 。位于从上往下第 iii 行和从左往上第 jjj 列的单元格用 (i,j)(i,j)(i,j) 表示。

SSSTTT 中单元格的颜色分别用 N2N^2N2 字符 Si,jS_{i,j}Si,j1≤i,j≤N1\leq i,j\leq N1i,jN )和 M2M^2M2 字符 Ti,jT_{i,j}Ti,j1≤i,j≤M1\leq i,j\leq M1i,jM )表示。在网格 SSS 中,如果 Si,jS_{i,j}Si,j 为".",则单元格 (i,j)(i,j)(i,j) 为白色;如果 Si,jS_{i,j}Si,j 为 “#”,则单元格 (i,j)(i,j)(i,j) 为黑色。网格 TTT 也是如此。

SSS 中找到 TTT 。更精确地说,输出满足以下条件的整数 aaabbb1≤a,b≤N−M+11 \leq a,b \leq N-M+11a,bNM+1 ):

  • 每个 i,ji,ji,j ( 1≤i,j≤M1\leq i,j \leq M1i,jM ) 都有 Sa+i−1,b+j−1=Ti,jS_{a+i-1,b+j-1} = T_{i,j}Sa+i1,b+j1=Ti,j 个整数。

Constraints

  • 1≤M≤N≤501 \leq M \leq N \leq 501MN50
  • NNN and MMM are integers.
  • NNNMMM 都是整数。
  • Each of Si,jS_{i,j}Si,j and Ti,jT_{i,j}Ti,j is . or #.
  • Si,jS_{i,j}Si,jTi,jT_{i,j}Ti,j 中的每一个都是 .#
  • There is exactly one pair (a,b)(a,b)(a,b) satisfying the condition.
  • 正好有一对 (a,b)(a,b)(a,b) 满足条件。

题解

暴力遍历所有可能得左上角,如果匹配则输出。

def solve():  
    n, m = map(int, input().split())
    gs = [list(input()) for i in range(n)]
    gt = [list(input()) for i in range(m)]
    for bx in range(n-m+1):
        for by in range(n-m+1):
            f = 1
            for x in range(m):
                for y in range(m):
                    if gt[x][y] != gs[bx+x][by+y]:
                        f = 0
                        break
        
AtCoder Beginner Contest 134 是一场 AtCoder 的入门级比赛,以下是每道题的简要题解: A - Dodecagon 题目描述:已知一个正十二边形的边长,求它的面积。 解题思路:正十二边形的内角为 $150^\circ$,因此可以将正十二边形拆分为 12 个等腰三角形,通过三角形面积公式计算面积即可。 B - Golden Apple 题目描述:有 $N$ 个苹果和 $D$ 个盘子,每个盘子最多可以装下 $2D+1$ 个苹果,求最少需要多少个盘子才能装下所有的苹果。 解题思路:每个盘子最多可以装下 $2D+1$ 个苹果,因此可以将苹果平均分配到每个盘子中,可以得到最少需要 $\lceil \frac{N}{2D+1} \rceil$ 个盘子。 C - Exception Handling 题目描述:给定一个长度为 $N$ 的整数序列 $a$,求除了第 $i$ 个数以外的最大值。 解题思路:可以使用两个变量 $m_1$ 和 $m_2$ 分别记录最大值和次大值。遍历整个序列,当当前数不是第 $i$ 个数时,更新最大值和次大值。因此,最后的结果应该是 $m_1$ 或 $m_2$ 中较小的一个。 D - Preparing Boxes 题目描述:有 $N$ 个盒子和 $M$ 个物品,第 $i$ 个盒子可以放入 $a_i$ 个物品,每个物品只能放在一个盒子中。现在需要将所有的物品放入盒子中,每次操作可以将一个盒子内的物品全部取出并分配到其他盒子中,求最少需要多少次操作才能完成任务。 解题思路:首先可以计算出所有盒子中物品的总数 $S$,然后判断是否存在一个盒子的物品数量大于 $\lceil \frac{S}{2} \rceil$,如果存在,则无法完成任务。否则,可以用贪心的思想,每次从物品数量最多的盒子中取出一个物品,放入物品数量最少的盒子中。因为每次操作都会使得物品数量最多的盒子的物品数量减少,而物品数量最少的盒子的物品数量不变或增加,因此这种贪心策略可以保证最少需要的操作次数最小。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值