2022/8/27 京东笔试


1、构造题,1~n^2个数,构造一个n*n的矩阵使得矩阵任意相邻的数字相加都为奇数
n = int(input())
if n % 2 == 1:
    for i in range(1, n * n + 1, n):
        tmp = list(map(str, list(range(i, i + n))))
        print(' '.join(tmp))
else:
    flag = 1
    for i in range(1, n * n + 1, n):
        tmp = list(map(str, list(range(i, i + n))))
        if flag % 2 == 0:
            tmp = tmp[1:] + [tmp[0]]
        print(' '.join(tmp))
        flag += 1

2.给定一个数组a,求最少需要改动多少个元素,使得数组a类似于[a,b,a,b,...,]的形式,注意a不能等于b
n=int(input())
a=list(map(int,input().split()))
buf=[dict() for i in range(2)]
for i in range(n):
    buf[i&1][a[i]]=buf[i&1].get(a[i],0)+1
key=[list(buf[i].keys()) for i in range(2)]
for i in range(2):
    key[i].sort(key=lambda x:buf[i][x],reverse=True)
ans=n
ans=min(ans,n-max(buf[0][key[0][0]],buf[1][key[1][0]]))
if key[0][0]!=key[1][0]:
    ans=min(ans,n-buf[0][key[0][0]]-buf[1][key[1][0]])
else:
    if len(key[0])>1:
        ans=min(ans,n-buf[0][key[0][1]]-buf[1][key[1][0]])
    if len(key[1])>1:
        ans = min(ans, n - buf[0][key[0][0]] - buf[1][key[1][1]])
print(ans)
3.给定一个整数n,求长度为n的字符串中"red"作为子串出现次数大于等于2的字符串总数。
我是这样考虑的:正着做不好做,那就反着做,用所有字符串的数量减去不合法的字符串的数量
不合法的字符的字符串总共有三种情况:
0)完全不含"red"
1)只含有一个"red"
2) 第1种情况的补充,类似于这种形式:"...rreded...","...reredd..."
但是只过了20%...(草,只含有一个"red"的情况求错了)
n=int(input())
if n<6:
    print(0)
else:
    mod=1000000007
    dp=[[1]*26 for i in range(26)]
    one=0
    two=0
    if n-3<3:
        one=pow(26,n-3)
    if n-6<3:
        two=pow(26,n-6)
    for i in range(1,n-2+1):
        ndp=[[0]*26 for _ in range(26)]
        for j in range(26):
            for k in range(26):
                for x in range(26):
                    if j==17 and k==4 and x==3:
                        continue
                    ndp[k][x]+=dp[j][k]
                    ndp[k][x]%=mod
        dp=ndp
        if i+2==n-3:
            for j in range(26):
                for k in range(26):
                    one=(one+dp[j][k])%mod
        if i+2==n-6:
            for j in range(26):
                for k in range(26):
                    two=(one+dp[j][k])%mod
    zero=0
    for i in range(26):
        for j in range(26):
            zero = (zero + dp[i][j]) % mod
    ans=pow(26,n,mod)
    ans=((ans-zero)%mod+mod)%mod
    ans=((ans-one*(n-2)%mod)%mod+mod)%mod
    ans=((ans-two*(n-5)*2%mod)%mod+mod)%mod
    print(ans) 

贴个大佬的做法
def solve(n):
    #f[i]表示长度为i且不含"red"的字符串数量
    #g[i]表示长度为i且仅含1个"red"的字符串数量
    mod = 1000000007
    if n < 6:
        return 0
    f = [0] * (n + 1)
    g = [0] * (n + 1)
    f[1] = 26
    f[2] = 26 * 26
    f[3] = 26 ** 3 - 1
    g[3] = 1
    for i in range(4, n + 1):
        f[i] = ((f[i - 1] * 26 - f[i - 3]) % mod + mod) % mod
        g[i] = ((g[i - 1] * 26 - g[i - 3] + f[i - 3]) % mod + mod) % mod
    return ((pow(26, n, mod) - f[i] - g[i]) % mod + mod) % mod
n=int(input())
print(solve(n))


#京东##京东笔试#
全部评论
 A了2.2,预期中位数,不知道会不会挂我
2 回复 分享
发布于 2022-08-27 22:14 浙江

相关推荐

评论
1
8
分享

创作者周榜

更多
牛客网
牛客企业服务