import os import sys from itertools import accumulate defget_presum(a): sum=list(accumulate(a)) returnsum defget_sum(sum,l,r): if l==0: returnsum[r] else: returnsum[r]-sum[l-1] s=input() n=len(s) a=[] for x in s: if x=="L": a.append(1) else: a.append(-1) sum=get_presum(a) ans=0 for i inrange(n): for j inrange(i,n): if get_sum(sum,i,j)==0: ans=max(ans,j-i+1) print(ans)
from itertools import accumulate MOD=1000000007 defget_presum(a): sum=list(accumulate(a)) sum=[x % MOD for x insum] returnsum defget_sum(sum,l,r): if l==0: returnsum[r] else: return (sum[r]-sum[l-1]+MOD)%MOD n,m=map(int,input().split()) a=list(map(int,input().split())) sum_list=[] for i inrange(1,6): sum_list.append(get_presum([x**i for x in a])) for i inrange(m): l,r,k=map(int,input().split()) print(get_sum(sum_list[k-1],l-1,r-1))
蓝桥17160
问题描述
小 Z 喜欢盖印章。
有一天,小 Z 得到了一个 $n\times m$ 的网格图,与此同时,他的手上有两种印章(分别称为 A,B),如下图所示。
xxxxxxxxxx15 1import os2import sys34# 请在此输入您的代码5n = int(input())6a = list(map(int, input().split()))7a.sort()8b = []9c = []10for i in range(n):11 if a[i] % 2 == 0:12 b.append(a[i])13 else:14 c.append(a[i])15print(“ “.join(map(str, c)),” “.join(map(str,b)))python
1
0 3
样例输入2
1 2 3 4
3 32 110 110 110
样例输出2
1
2 0
说明
上述样例如图所示:
运行限制
语言
最大运行时间
最大运行内存
C++
1s
128M
C
1s
128M
Java
2s
128M
Python3
3s
128M
PyPy3
3s
128M
Go
3s
128M
JavaScript
3s
128M
奇偶排序
问题描述
小蓝所在的王国名为偶数王国,在他们王国中数字的比较通常按以下步骤进行:
如果两个数字的奇偶性不同,那么偶数一定大于奇数。
如果两个数字的奇偶性相同,则比较它们的实际数值大小。
现在给你一个正整数数组 AA,请你输出按照偶数王国规则从小到大排序后的 AA。
输入格式
第一行输入一个整数 N(1≤N≤103)N(1≤N≤103) 表示数组 AA 的长度。
第二行输入 NN 个整数 A1,A2,A3,⋯ ,AN(1≤Ai≤105)A1,A2,A3,⋯,AN(1≤Ai≤105) 表示数组 AA。
输出格式
输出一行 NN 个整数表示答案。
样例输入
1 2
5 1 2 3 4 5
样例输出
1
1 3 5 2 4
解题思路
解法1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
import os import sys
# 请在此输入您的代码
n = input() str_n = map(int,input().split()) list_a = [] list_b = [] for i in str_n: if i%2==0: list_b.append(i) else: list_a.append(i) list_a.sort() list_b.sort() print(" ".join(map(str,list_a))+" "+" ".join(map(str,list_b)))
解法2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
import os import sys
# 请在此输入您的代码 a=input() b=list(map(int,input().split())) c=[] d=[] for i inrange(len(b)): if b[i]%2==0and b[i]!=0: c.append(b[i]) else: d.append(b[i]) c.sort() d.sort() e=d+c f=' '.join(map(str,e)) print(f)
解法3:
1 2 3 4 5 6 7 8 9 10 11 12 13
n=int(input()) nums=list(map(int,input().split())) a=[] b=[] for i inrange(n): if nums[i]&1: a.append(nums[i]) else: b.append(nums[i]) a.sort() b.sort() c=a+b print(*c)
解法4:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
import os import sys
# 请在此输入您的代码 n = int(input()) a = list(map(int, input().split())) a.sort() b = [] c = [] for i inrange(n): if a[i] % 2 == 0: b.append(a[i]) else: c.append(a[i]) print(" ".join(map(str, c))," ".join(map(str,b)))
import os import sys from collections import Counter
# 请在此输入您的代码 n = int(input()) a = [int(x) for x ininput().split()] a.sort() pool ={}
rs = 0
for x in a: e = 2 ** x.bit_length()-x rs += pool.get(e,0) if x in pool: pool[x] += 1 else: pool[x] = 1
print(rs)
解法2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
from math import log from collections import Counter n = int(input()) arr = list(map(int, input().split())) arr.sort() d = Counter() for i inrange(n):#预处理计数 d[arr[i]] += 1 ans = 0 for i inrange(n - 1, 0, -1): d[arr[i]] -= 1#计数减去当前位置 cnt = int(log(arr[i], 2)) + 1 res = 2 ** cnt - arr[i] ans += d[res] # ans+=arr[0:i].count(res) print(ans)
解法3:
两个数加起来是2n的都符合条件,用hash表计数。
1 2 3 4 5 6 7 8 9 10 11 12
n = int(input()) a = sorted(map(int,input().split())) res = [] for i inrange(1, 32): res.append(1<<i) cnt = {} ans = 0 for i inrange(n): for j inrange(len(res)): ans += cnt.get(res[j] - a[i], 0) if a[i] notin cnt: cnt[a[i]] = 1 else: cnt[a[i]] += 1 print(ans)
题目:霓虹
问题描述
晚上,小蓝正无聊的走在大路上,小蓝所在的街区是一个带有赛博朋克风格的街区。
他抬头一看,看到了很多霓虹灯牌。在其中的某一个店铺前,挂着一排的数字灯牌,每一个数字的显示都依靠 77 段 LED 管,亮着的灯管组成数字,具体来说如下图所示:
ans = 0 for i inrange(len(S)): ans += nu_i(pos[int(S[i])] ^ pos[int(T[i])]) print(ans)
其他解法:
解法1:
1 2 3 4 5 6 7 8
li=[[1,0,1,1,0,1,1,1,1,1],[1,0,0,0,1,1,1,0,1,1],[1,1,1,1,1,0,0,1,1,1],[0,0,1,1,1,1,1,0,1,1],[1,0,1,0,0,0,1,0,1,0],[1,1,0,1,1,1,1,1,1,1],[1,0,1,1,0,1,1,0,1,1]] num1=list(map(int,input())) num2=list(map(int,input())) add=0 for i inrange(len(num1)): for j in li: add+=j[num1[i]]^j[num2[i]] print(add)
start_num = input() end_num = input() count = 0 for i inrange(len(start_num)): for j inrange(7): if num[int(start_num[i])][j] != num[int(end_num[i])][j]: count += 1 print(count)
解法4:
1 2 3 4 5 6 7 8 9 10 11 12 13
S = input() T = input() n = len(S) ans = 0 res = {0: "1111110", 1: "0011000", 2: "0110111", 3: "0111101", 4: "1011001", 5: "1101101", 6: "1101111", 7: "0111000", 8: "1111111", 9: "1111101"} for i inrange(n): a = res[int(S[i])] b = res[int(T[i])] for j inrange(len(a)): if a[j] != b[j]: ans += 1 print(ans)
矩阵X
问题描述
小蓝面对一个 n×m 的矩形D,其中每个位置 (i,j) 上都有一个元素 xi,j。
我们定义两个函数 f(D)、g(D),f(D) 的值为矩阵 D 的所有元素的和值,g(D) 为矩阵 D 的极差,即矩阵中的最大值减去最小值。
for i inrange(1, n + 1): for j inrange(1, m + 1): prefix[i][j] = prefix[i-1][j] + prefix[i][j-1] - prefix[i-1][j-1] + matrix[i][j]
defshift_window(a, n, k, f, l): b = [] de = deque() for i inrange(n): while de and f(a[i], a[de[-1]], l): de.pop() de.append(i) if i >= de[0] + k: de.popleft() if i >= k - 1: b.append(a[de[0]]) return b
deff(x, y, l): if l: return x >= y return x <= y
bb_mx = [] bb_mn = [] for i inrange(1, n + 1): bb_mx.append(shift_window(matrix[i][1:], m, m1, f, 1)) bb_mn.append(shift_window(matrix[i][1:], m, m1, f, 0))
cc_mx = [] cc_mn = [] for j inrange(len(bb_mx[0])): temp1 = [] temp2 = [] for i inrange(n): temp1.append(bb_mx[i][j]) temp2.append(bb_mn[i][j]) cc_mx.extend(shift_window(temp1, n, n1, f, 1)) cc_mn.extend(shift_window(temp2, n, n1, f, 0))
gap = [0] * len(cc_mn) for i inrange(len(cc_mn)): gap[i] = cc_mx[i] - cc_mn[i] cnt = 0 ans = -1 for j inrange(1, m - m1 + 2): for i inrange(1, n - n1 + 2): ii, jj = i + n1 - 1, j + m1 - 1 pre_sum = prefix[ii][jj] - prefix[ii-n1][jj] - prefix[ii][jj-m1] + prefix[ii-n1][jj-m1] ans = max(ans, pre_sum * gap[cnt]) cnt += 1
print(ans)
兽之泪
问题描述
在蓝桥王国,流传着一个古老的传说:在怪兽谷,有一笔由神圣骑士留下的宝藏。
小蓝是一位年轻而勇敢的冒险家,他决定去寻找宝藏。根据远古卷轴的提示,如果要找到宝藏,那么需要集齐 nn 滴兽之泪,同时卷轴中也记载了,每击败一次怪物,就能够收集一滴兽之泪。
k, n = map(int, input().split()) a = [0] * (k + 1) b = [0] * (k + 1)
for i inrange(1, k + 1): a[i], b[i] = map(int, input().split())
ans1, ans2 = 0, float('inf')
# ------- 不挑战最后一个怪兽 q = [] for i inrange(1, k): heapq.heappush(q, (a[i], i))
tmp = n while tmp: x = heapq.heappop(q) ans1 += x[0] heapq.heappush(q, (b[x[1]], x[1])) tmp -= 1
# ------- 挑战最后一个怪兽 if n >= k: ans2 = 0 q = [] for i inrange(1, k + 1): ans2 += a[i] heapq.heappush(q, (b[i], i)) n -= k while n: x = heapq.heappop(q) ans2 += x[0] heapq.heappush(q, (b[x[1]], x[1])) n -= 1