网站链接:比赛详情 - CodeFun2000
文章目录
- 塔子月赛第一场 题解
-
- 第一题-苦逼打工塔
- 第二题-2333的超级队列
- 第三题-2333的小清新数论题
- 第四题-塔子的数数题
1、苦逼打工塔
-
import sys input = lambda:sys.stdin.readline().strip() def func(): n, k = map(int, input().split()) a = list(map(int, input().split())) # 去掉开头丢失的 a.reverse() while a and a[-1] == -1: a.pop() if not a:#全丢失 print() return a.reverse() # 排序找中位数 m = sorted([x for x in a if x != -1]) m = m[len(m)//2] ans = [] c = 0 for i in a: if i == -1:c += 1 else: if c:#有丢失情况 if c <= 3:#丢失数大于3 ans += [ans[-1]] * c else: ans += [-1] * c c = 0 if i < m - k:#趴着 ans.append(0) elif i > m + k:#站着 ans.append(2) else:#坐着 ans.append(1) if c:#有丢失情况 if c <= 3:ans += [ans[-1]] * c else:ans += [-1] * c print(*ans) func()
2.2333的超级队列
-
不太会做,只能暴力骗分了
-
import sys input = lambda:sys.stdin.readline().strip() from collections import deque n = int(input()) if n <= 1000:#n<1000正常模拟 a = deque([]) for _ in range(n): x = list(map(int, input().split())) if x[0] == 1: a.appendleft(x[1]) elif x[0] == 2: a.append(x[1]) elif x[0] == 3: a = deque(sorted(a)) else: res = 0 for i in range(x[1] - 1, x[2]): res += a[i] print(res) else:#暴力前后缀骗分 a, b = [0], [0] for _ in range(n): x = list(map(int, input().split())) if x[0] == 1: a.append(x[1] + a[-1]) elif x[0] == 2: b.append(x[1] + b[-1]) elif x[0] == 4: l, r = x[1], x[2] mid = len(a) - 1 ans = 0 if l <= mid: ans += a[mid - l + 1] - a[max(0, mid - r)] if r > mid: ans += b[r - mid] - b[max(l - mid - 1, 0)] print(ans)
3、2333的小清新数论题
-
模拟前几项找规律就行了
-
import sys input = lambda:sys.stdin.readline().strip() n = int(input()) res = [0]*n for i in range(n//2): res[i*2+1] = i+1 for i in range((n+1)//2): res[i*2] = n//2+i+1 print(*res)
4、塔子的数数题
-
这题也是只会暴力骗分了
-
import sys input = lambda:sys.stdin.readline().strip() n = int(input()) a = list(map(int,input().split())) mod = 10 ** 9 + 7 if n <= 8: a.sort() u = [0] * n b = [] ans = [0] def back(): if len(b) == n: lin = 0 h = {} for i in range(n): if b[i] in h: ans[0] += h[b[i]] elif b[i] - 1 in h or b[i] + 1 in h: ans[0] += 1 lin += 1 h[b[i]] = 1 else: h[b[i]] = 0 return pre = -1 for i in range(n): if a[i] == pre or u[i]: continue pre = a[i] u[i] = 1 b.append(a[i]) back() u[i] = 0 b.pop() back() print(ans[0] % mod) else: print(0)