T1:Matrix
小z 的女朋友送给小z 一个
的矩阵。但是矩阵实在太大了,小z 的女朋友拿不动,只能带给他两个长度为n 的整数序列l,t,分别作为矩阵F的第一行和第一列(保证
),并且告诉小z 矩阵可以通过如下方式得到:
现在小z 猜到了系数a,b,他想要计算
模
的值。
忽然想不起从
到
的路径数了,数组开小……
对于一个
,通过大力推式子可以发现一定会乘上
对于
,则一定会乘上
然后考虑对于每一个值,会对答案造成多少贡献
可以发现,每一个值的贡献次数就是这个位置到
的路径数
以该位置为起点,那么就是从
到
,但是第一步是固定的
那么就成了从
到
类似蚂蚁路径,方案数为
即为对答案的贡献次数
T2:pq
小q 的女朋友送给小q n个整数。但是这些数太大了,小q 的女朋友拿不动,于是拜托小q把这些数减少一些。
小q 每次可以选择其中的两个x,y (不能同时选择同一个数) 变成x−P,y−Q,现在他希望能知道最多能帮女朋友减掉多少P,Q。
设
表示处理到第
个数,还有
个
,
个
没处理,存的是已经处理的个数
可以发现,如果
的个数为
,那么
的个数的最大值不会超过
如果
的个数为
,那么
的个数的最大值不会超过
如果都不为零,那么
的个数都不会超过
根据这个性质,我们可以暴力把
拆成
个
,
个
分类讨论
和
,
和
的大小,然后统计答案
但是数组
会炸,因为每一次只会有
对答案造成贡献,可以把i滚动掉
时间效率
T3:graph
小f 的女朋友送给小f 一个有n个点m条边的无向图。但是这个无向图太大了,小f 的女朋友拿不动,于是小f 希望只保留图的一部分。在这张图上,对于第i条边
,从
到
的代价为
,从
到
的代价为
。
小f 希望只保留一个包含1号点的有向环(不能有重复的点),使得环上代价之和最小。
因为环中一定有节点
,那么就从1开始大力DFS,数组开够有
%
那么我们可以把
拆成
个点,暴力枚举环上与
相连的两点,取最小值,效率为
,
%
然后考虑优化
我们可以把与
相连的点分成两部分,然后跑最短路,但是有可能最短的两个点在一个集合中,考虑优秀的分组方式
考虑按位分组,可以保证对于任意的
都一定会有一次分在不同的两组,需要分成
组,然后统计最小值即可
时间效率