补题02

1.https://codeforces.com/contest/2033/problem/B
这道题对每个测试样例一个矩阵,求最小次数,观察规律知道只要求最小值的和即可。代码如下:

for _ in range(int(input())):
n = int(input())
mp = [list(map(int,input().split())) for _ in range(n)]
s = 0
for d in range(-n+1,n):
mm = min(mp[i][i-d] for i in range(max(0,d),min(n,n+d)))
if mm < 0:
s += abs(mm)
print(s)
找到对角线的元素特点,mp[i][i-d]都可以想到,主要是后面的索引值要取正确,否则会错。
2.https://codeforces.com/contest/2033/problem/C
这道题模拟一下即可,我不知道for循环遍历整个数组能过不,但是只用遍历一半的数组量就行了,若len是奇数,把中间的数看成对称轴,若是偶数,把中间两个数字的中间当成对称轴,遍历前面的即可。这道题其实含有一个点,就是遍历到的点或镜像对称的点满足要求,直接交换,不管那两个交换的元素是否相等,对答案没有任何影响。代码如下:
for _ in range(int(input())):
ans = 0
n = int(input())
a = list(map(int,input().split()))
for i in range(1,int(n//2)):#转化问题
if a[i] == a[i-1] or a[-i] == a[-i-1]:
a[i],a[-i-1] = a[-i-1],a[i]
for i in range(n-1):
ans += (a[i] == a[i+1])
print(ans)
既然使用了python中特有的负索引值,就要遵守一定约束,即对于a[i]来说它的镜像索引并不是a[-i],而是a[-i-1],对于 a[i],a[-i-1] = a[-i-1],a[i] 的解释可以看下面图解:

posted @ 2024-11-03 08:53  fafatadie  阅读(3)  评论(0编辑  收藏  举报