2020招行信用卡,6点半发现有八点截至的测评,7-9点又是笔试,果断滑跪,大概7点半才开始的笔试,编程瞬间没脑子了。。
第一题
输入:
第一行:n,m 数组长度,mod的值
第二行:原始数组(长度n,里面每一个小于m)
求多少次操作能产生不减的数组,一次操作可以对若干项各自+1(mod m)
例如:
输入
5 7
0 1 1 1 4
输出:0
输入
4 6
1 2 3 0
输出:3
思路:设A[i][j] 表示前i个元素以j结尾的非减数列需要的次数,那么首先计算新取的第i个数变为j需要的次数s,再考虑前面i-1个元素,如果前面的结尾小于等于j,那么只要取前面的最小次数p,即为满足当前非减的前部分次数,因为前后可以同时改变,只要max(p,s),如果前面的元素结尾大于j,那么考虑前面的结尾要先变成小于j的,回到之前一种情况,没必要考虑。
import sys
n,m = list(map(int, input().split()))
nlist = list(map(int, input().split()))
A = [[0 for _ in range(m)] for _ in range(n)]
for j in range(m):
A[0][j] = j - nlist[0] if j - nlist[0]>=0 else m - (nlist[0] - j)
for i in ra