C - Remainder Minimization 2019
如果LR相差在2019内,那么遍历LR
否则可以视作为1…2019的遍历
D - Rain Flows into Dams
设解为M1,M2...MnM_1,M_2...M_nM1,M2...Mn
∵M1+M2=2A1\because M_1+M_2=2A_1∵M1+M2=2A1
M2+M3=2A2M_2+M_3=2A_2M2+M3=2A2
.........
左边相加可以得到
M1+...+Mn=A1+...+AnM_1+...+M_n=A_1+...+A_nM1+...+Mn=A1+...+An
M的和即可求出。
剩下由于M长度为奇数,可以凑出M1+M2+...+Mn−1M_1+M_2+...+M_{n-1}M1+M2+...+Mn−1
即求得MnM_nMn
接着从后往前计算M的各项。
# -*- coding: utf-8 -*-
# @time : 2023/6/2 13:30
# @author : yhdu@tongwoo.cn
# @desc :
# @file : atcoder.py
# @software : PyCharm
import bisect
import copy
import sys
from sortedcontainers import SortedList
from collections import defaultdict, Counter, deque
from functools import lru_cache, cmp_to_key
import heapq
import math
sys.setrecursionlimit(100010)
def main():
items = sys.version.split()
if items[0] == '3.10.6':
fp = open("in.txt")
else:
fp = sys.stdin
n = int(fp.readline())
a = list(map(int, fp.readline().split()))
sb = sum(a)
eb = 0
for i in range(0, n - 1, 2):
eb += a[i] * 2
b = [0] * n
b[-1] = sb - eb
for i in range(n - 2, -1, -1):
b[i] = 2 * a[i] - b[i + 1]
print(*b)
if __name__ == "__main__":
main()
E - Virus Tree 2
普通的乘法原理,画图想一想
根节点可以乘K
接下来的第一层子节点,第一个可以乘K-1,第二个乘K-2,依次递减
第二层子节点,第一个点可以乘K-2,第二个乘K-3,依次递减
之后的子节点和第二层相同
# -*- coding: utf-8 -*-
# @time : 2023/6/2 13:30
# @author : yhdu@tongwoo.cn
# @desc :
# @file : atcoder.py
# @software : PyCharm
import bisect
import copy
import sys
from sortedcontainers import SortedList
from collections import defaultdict, Counter, deque
from functools import lru_cache, cmp_to_key
import heapq
import math
sys.setrecursionlimit(100010)
def main():
items = sys.version.split()
if items[0] == '3.10.6':
fp = open("in.txt")
else:
fp = sys.stdin
mod = 10 ** 9 + 7
n, m = map(int, fp.readline().split())
g = [[] for _ in range(n + 1)]
for i in range(n - 1):
u, v = map(int, fp.readline().split())
g[u].append(v)
g[v].append(u)
ans = 1
def go(cur, fa):
nonlocal ans
if fa == -1:
t = m - 1
else:
t = m - 2
for child in g[cur]:
if fa == child:
continue
ans = ans * t % mod
t -= 1
for child in g[cur]:
if fa == child:
continue
go(child, cur)
go(1, -1)
ans = ans * m % mod
print(ans)
if __name__ == "__main__":
main()
文章介绍了两个编程问题:C-RemainderMinimization中的LR求和策略和D-RainFlowsintoDams的求解方法,以及E-VirusTree2中利用乘法原理计算树节点值的问题,涉及图的遍历、递归和模运算等技术。
259

被折叠的 条评论
为什么被折叠?



