Codeforces Round 863 (Div. 3) [A - E] 题解
A. Insert Digit
给定两个数字n和d,(1≤n≤2e5; 0≤d≤9) 把数字d插入到n的空隙中,使得插入后的数字最大。
贪心的从后往前遍历,如果当前的数字小于等于d,就可以插到这个位置
import sys
input = sys.stdin.readline
for _ in range(int(input())):
n,d = map(int,input().split())
s = input()
idx = n
for i in range(n - 1,-1,-1):
if d > int(s[i]):
idx = i
print(s[:idx] + str(d) + s[idx:])
B - Conveyor Belts
有很多纸袋围成n * n 大小的圈,左下角点为1,1
给定x1,y1,x2,y2 求这两个点所在的纸带间的距离
模拟即可
import sys
input = sys.stdin.readline
for _ in range(int(input())):
n, x1, y1, x2, y2 = list(map(int,input().split()))
mx1 = max(abs(n + 1 - 2 * x1), abs(n + 1 - 2 * y1))
mx2 = max(abs(n + 1 - 2 * x2), abs(n + 1 - 2 * y2))
print(abs(mx2 - mx1) // 2)
C - Restore the Array
有一个长为n的数组a 和一个长为n-1的数组b,其中 b[i] = max(a[i],a[i + 1])
给出b数组,求一个a数组
我们可以发现对于ai,a(i + 1),a(i +2) 来说,
其会形成bi,b(i+1)
中间的a(i + 1)其实对于bi 和 b(i + 1)都有贡献,中间的数字必须要小于两边的最小值
import sys
input = sys.stdin.readline
def ii():
return int(input())
def lii():
return list(mi())
for _ in range(ii()):
n = ii()
b = lii()
a = [0] * n
a[0] = b[0]
for i in range(1,n - 1):
a[i] = min(b[i - 1],b[i])
a[-1] = b[-1]
print(*a)
D - Umka and a Long Flight
F函数是一个斐波那契数列,一个长方形的高h和宽w必须满足 h = F(n),w = F(n + 1)
一个长方形由n - 1个正方形组成,且每个正方形的边长都必须是斐波那契数列中的一个数字,每个正方形和其他正方形最多只有一条边相邻
给你一个边长为1的正方形的坐标, 求问是否可以将长方形分成n - 1个正方形
找规律,我们发现长方形一定是由这样的正方形构成的:
每个最大的正方形一定是紧挨着短的那条边的(或者说是高h),直接dfs强模拟,每次dfs重新计算1×1的正方形所在的位置即可
import sys
input = sys.stdin.readline
def I():
return input()
def ii():
return int(input())
def mi():
return map(int, input().split())
def lii():
return list(mi())
F = [1, 1]
for i in range(2, 46):
F.append(F[i - 1] + F[i - 2])
for _ in range(ii()):
n, x, y = mi()
def dfs(n, x, y):
if n <= 1: return True
h, w = F[n], F[n + 1]
if w - h < y <= h:
return False
if y > h:
# x - h,y
return dfs(n - 1, w - y + 1,x)
return dfs(n - 1, w - h - y + 1,x)
print("YES" if dfs(n, x, y) else "NO")
E - Living Sequence
请你找到不出现4的第k个数
比如a = [1,2,3,5,6,7,8,9,10,11,12,13,15,16,17,18 …]
那么k=4的时候为5
我们可以发现各位上不出现4,十位上不出现4,百位上不出现4…本质上就是一个9进制啊。
因此我们可以对9取余,如果余数大于等于四,说明此时已经包含了4,那么加一跳过4就好了
for _ in range(int(input())):
n = int(input())
base9 = ''
while n:
base9 += str(n % 9 + (n % 9 >= 4)); n //= 9
print(base9[::-1])