阿里笔试AK(9月25日)

T1 直接模拟,奇数的话,讨论一下最中间那个只能是xszo之间一个,然后把两边拆成两份,按位置比较,为了比较方便,可以写一个映射函数比较

def fc(c):
    if c in ['o', 'x', 's', 'z']:
        return c
    if c == 'd':
        return 'p'
    if c == 'p':
        return 'd'
    if c == 'b':
        return 'q'
    if c == 'q':
        return 'b'
    if c == 'n':
        return 'u'
    if c == 'u':
        return 'n'
    return 'A'

def solve():
    s = input()
    n = len(s)
    t1, t2 = "", ""
    if n % 2 == 1:
        c = s[n // 2]
        if c not in ['o', 'x', 's', 'z']:
            print("no")
            return
        for i in range(n):
            if i < n // 2:
                t1 += s[i]
            if i > n // 2:
                t2 += s[i]
    else:
        for i in range(n):
            if i < n // 2:
                t1 += s[i]
            if i >= n // 2:
                t2 += s[i]            
    t2 = t2[::-1]
    m = len(t1)
    for i in range(m):
        if fc(t1[i]) != t2[i]:
            print("no")
            return
    print("yes")

q = int(input())
while q > 0:
    solve()
    q -= 1

T2 动态规划,dp[i][j]记录状态 然后往四个方向转移即可,Python3会TLE,pypy3能过

import sys

input = sys.stdin.readline

n = int(input())
grid = [list(map(int, input().split())) for _ in range(n)]

dp = [[-10 ** 18] * n for _ in range(n)]
dp[0][0] = grid[0][0]
for j in range(n):
    for i in range(n):
        for dx, dy in ((i + 2, j - 1), (i - 2, j - 1), (i - 1, j - 2), (i + 1, j - 2)):
            if 0 <= dx < n and 0 <= dy < n:
                dp[i][j] = max(dp[i][j], grid[i][j] + dp[dx][dy])
print(max(dp[i][-1] for i in range(n)))

T3 对单独的一段连续0,记录l为长度,共有2^(l-1)种取法(开头和结尾段无论怎样都只有1种取法) 最后算总排列数为0的个数的阶乘除去每一段0的个数的阶乘

import sys
input = sys.stdin.readline

n = int(input())
s = list(input().strip())

stack = [[s[0],1]]
for i in range(1,n):
    if s[i] == stack[-1][0]:
        stack[-1][1] += 1
    else:
        stack.append([s[i],1])
Mod = 10 ** 9+ 7
Mx = 10**5 + 1
p = [1] * Mx
for i in range(1,Mx):
    p[i] = p[i - 1] * i % Mod
zero_count = 0
ans = 1
for i in range(len(stack)):
    if stack[i][0] == "0":
        zero_count += stack[i][1]
        ans *= pow(p[stack[i][1]],Mod - 2,Mod)
        if i != 0 and i != len(stack) - 1:
            ans *= pow(2,stack[i][1] - 1,Mod)
        ans %= Mod
print(ans * p[zero_count] % Mod)

#阿里##笔试##python#
全部评论

相关推荐

嘀哩咕噜说啥呢:27届,这简历,强的逆天,大厂实习随便冲,面经多少看点,hot100刷完,大厂随便挑了
点赞 评论 收藏
分享
评论
3
2
分享

创作者周榜

更多
牛客网
牛客企业服务