题目大意
给定一个$n*n$的数字矩阵,代表每个点的高度,每个数各不相同,求一条遍历所有的点的路径,要求只能上下左右移动,且高度下降的次数不小于高度上升次数。
more >>题目要求在树上求最短路,我们很容易想到LCA来解决。
但问题我们需要同时计算能获得的最大值,所以我们需要额外的倍增数组来维护一些值。
那么具体是什么呢?
在求答案的过程中,使用了这种方式遍历倍增数组。
比如$9 = 2^3 + 2^0$,那么就会先执行$x’ = f[x][3]$,后执行$x’’ = f[x’][0]$
1 | for(int i = 20; i >= 0; --i) |
1 | #include <cstdio> |
给定一个$n$个数的集合,Alice和Bob轮流操作,Alice先操作,每次选最大的数,将其减少任意值,再放回集合(需一直满足集合中元素互不相同的规定),集合中的数$a_i \ge 0$。谁先不能操作,谁就会输掉游戏输掉。
给定$n, a_i$,问谁会获胜。
这是一道相当妙的博弈论,这个游戏是个$ICG$,也就是说,存在必胜策略。我们把数都从小到大排序(每次执行操作后也排序)。
我们假设:
那么假如$a_n = a_{n-1} + 1$,那么双方的策略就一直是维持$a_n = a_{n-1}$,直到无法操作,因为一旦不满足这个条件,那么另外一方就能利用$a_n > a_{n-1} + 1$这个条件取胜。
那么一直这么做的话,执行最后一步的人会取胜,而执行到最后集合一定是$0,1,2,…,n-1$。且我们发现操作次数其实就是$a_n - (n-1)$,是的,很神奇和其它数无关,因为我们每次减少数,不能和其它数重合,且满足$a_n = a_{n-1}$,也就是说$[0,a_n]$中每个数都会被遍历到,所以其它数在哪都没关系。
那么可执行次数为奇数,先手必胜,否则后手必胜。
1 | #include <cstdio> |
给定两个数\(l, r\),将\([l, l + 1,..., r-1, r]\)的一个任意排列,全部异或\(x\),得到一个新的数组\(a\)。
给定\(l, r\)和\(a\)数组,求\(x\)。
其中\(0 = l \le r \le 2^{17}\) more >>
定义\(b_i为\)一个排列\(a\)中前\(i\)个数的最大值。 定义操作:把排列\(a\)向后移动一位,即,原本最后一个数成为第一个数,原本第一个数成为第二个... 定义\(c_i\)为向后移动\(i-1\)位后,每次生成的\(b_i\)数组中,不同的数的个数。
现在给定\(c\)数组,判断是否存在对应的排列\(a\) more >>
1 | # 1 |
1 | aDict['name'] # 如果存在则返回值,如果不存在则报错 |
1 | aDict.get(key, val) # 如果存在key则返回值,否则返回指定的val |
1 | del aDict['age'] # 删除 |
1 | for key in dict.keys () # 遍历key |
1 | x = (5,) # 仅有一个元素时,需要在结尾加逗号 |
与list完全一致
与列表推导式完全一致 1
2
3g = ((i + 2) ** 2 for i in range(10))
tuple(g) # 想要查看值需要用tuple
(4, 9, 16, 25, 36, 49, 64, 81, 100, 121)
循环访问时,可以用for遍历,也可用next()函数, 但需要注意,访问是单向的,访问一个元素后,该元素就会从生成器中消失 1
2
3
4
5
6
7
8
9
10
11g = ((i + 2) ** 2 for i in range(10))
tuple(g)
(4, 9, 16, 25, 36, 49, 64, 81, 100, 121)
list(g)
[]
g = ((i + 2) ** 2 for i in range(10))
g.__next__()
4
next(g)
9
1 | aList = [x * x for x in range(10)] |
这个分为两部分: 1
2x * x
for x in range(10) # 1
1 | freshfruit = [' banana', ' loganberry', ' passion fruit'] |
每当 #1循环一次,就把一个w.strip()放入到list中 .strip()函数会去掉字符串的前导空格
1 | vec = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] |
#1相当于一个两重循环 1
2
3
4ans = []
for elem in vec:
for num in elem:
ans.append(num)
1 | aList = [-1, -4, 6, 7.5, -2.3, 9, -11] |
1 | from random import randint |
#1相当于: 1
2
3
4ans = []
for index, value in enumerate(x):
if value == m:
ans.append(index)
1 | [(x, y) for x in [1, 2, 3] for y in [3, 1, 4] if x != y] |
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia-plus根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true