defsolve(): la,ra,lb,rb = map(int, input().split()) l = la+lb r = ra + rb ans = 0 if r - l > 10: ans = 9 else: for i inrange(l,r+1): x = i while x: ans = max(x%10,ans) x //= 10 print(ans) for _ inrange(int(input())): solve()
在学习了 2021 国际大学生程序设计竞赛亚洲区域赛南京站的《Paimon Sorting》一题中奇怪的排序算法 后,小青鱼想到了如下的一个问题。 给定序列 表示一个 n 的排列,您需要将该排列按升序排序,为此可以执行以下操作至多 次:选择两个下标 l 和 r 满足 以及 ,将 按升序进行排序。 请回忆:一个 n 的排列是一个长度为 n 的序列,每个从 1 到 n(含两端)的整数在其中都恰好出现一 次。
题目分析
这题等待队友写题解喽~
Python code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
import sys input = sys.stdin.readline for _ inrange(int(input())): n = int(input()) a = list(map(int, input().split())) ls = [] for i inrange(n): start = i end = i for j inrange(i+1, n): if a[start] > a[j]: end = j if start != end: ls.append((start + 1, end + 1)) a[start:end+1] = sorted(a[start:end+1]) print(len(ls)) for l, r in ls: print(l, r)
defsolve(): s = input().strip() cnt = 0 s1 = {'(',')'} for i inrange(len(s)-1): if (s[i] in s1 and s[i+1] in s1) or (s[i] notin s1 and s[i+1] notin s1): cnt += 1 if cnt >= 3: print("No") return print("Yes")
在学习了理查德-彭(Richard Peng)和桑托什-文帕拉(Santosh Vempala)的论文《比矩阵乘法更快地解决稀疏线性系统》(Solving Sparse Linear Systems Faster than Matrix Multiplication)后,小青鱼对任何稀疏的东西都很着迷。例如,稀疏矩阵。这里,稀疏矩阵指的是零元素的数量远远多于非零元素数量的矩阵。现在,小青鱼想出了一个关于二进制稀疏矩阵的问题,他想让你试着解决这个问题。
给定一个有 行和 列的二进制矩阵(只包含 s 和 s 的矩阵),你可以选择是否反转每一行。求在每列最多有一个 的情况下,有多少种方法可以选择一组行来反转(允许不选择任何行)。如果在其中一种方法中选择了一行,而在另一种方法中没有选择,那么这两种方法就被认为是不同的。
import sys from collections import deque input = sys.stdin.readline mod = 1000000007
defsolve(): defbfs(x): q = deque() q.append(x) while q: x = q.popleft() if color[x]: continue color[x] = cnt for y in g[x]: ifnot color[y]: q.append(y)
n, m = map(int, input().split()) ls = [input().strip() for _ inrange(n)] g = [[] for i inrange(n + n)] for i inrange(m//2+1): j = m - i - 1 l1, l2 = [], [] for k inrange(n): if ls[k][i] == '1': l1.append(k) if ls[k][j] == '1': l2.append(k) iflen(l1) + len(l2) <= 1: continue if i == j: iflen(l1) >= 2: print(0) return else: iflen(l1)+len(l2) > 2: print(0) return for a in l1: for b in l2: g[a].append(b) g[b].append(a) g[a + n].append(b + n) g[b + n].append(a + n) for a inrange(len(l1)): for b inrange(len(l1)): if a == b: continue g[l1[a]].append(l1[b] + n) g[l1[b] + n].append(l1[a]) g[l1[b]].append(l1[a] + n) g[l1[a] + n].append(l1[b])
for a inrange(len(l2)): for b inrange(len(l2)): if a == b: continue g[l2[a]].append(l2[b] + n) g[l2[b] + n].append(l2[a]) g[l2[b]].append(l2[a] + n) g[l2[a] + n].append(l2[b]) cnt = 0 color = [0] * (n + n) for i inrange(n + n): ifnot color[i]: cnt += 1 bfs(i) for i inrange(n): if color[i] == color[i + n]: print(0) return print(pow(2, cnt // 2, mod))