DAY 7

讲题啦

 

1.P2279 [HNOI2003]消防局的设立

能不能不用树形DP???(DP套DP)

先画一棵树

找到深度最深的节点

对于一个叶子节点,覆盖它自己:自己,兄弟,父亲,爷爷

但是一定选择爷爷节点,因为它能覆盖最多

找出深度最深的节点,在他的爷爷位置放兵,把他爷爷可以放到的所有节点都删掉,继续对其余节点进行操作,直到输为空

堆维护

 

 

 

 

 就是每种分组方案都有 M 种染色方案

 

N=6   4种方案

分两步:

1.求出多少种方案

2.染色方案数

 

1.n有多少个因子   O(根号n)

    for(1~根号n) 看数字n有多少个因子,就有多少种方案

2.M^k    快速幂

 

 

加强

只要分组内部人不一样,就算两组,问此时有多少种方案

比如  N=6

人:1  2 3  4  5  6 

组内人数  (1)     1  2  3  4  5  6

                (2)    (123  456)  (124  356) ......

                (3)

                (6)     123456

 

此时分成的子数一定是n的因子

分成 r 组,每组 N/r 个人

第一小组:C( N , N/r )

第二小组:C( N-N/r , N/r )

.......

最后一组:C( N/r , N/r )

乘起来,除以  !r ,因为这几个组没有顺序

then,问题来了,如何算C,如何算 M^k,k 会hin大

 化简式子

 

 

问题是:

那么算 k 的时候,k%啥???

 

 欧拉定理:

 

 

 所以问题就剩下:

如何算:

 

为啥这个题的取模数好奇怪

 1e9-401

φ(1e9-401)=1e9-402=2*13*5281*7283

质因子都在一万以内

所以取模就拆成%4个数分别等于多少。然后再乘回来

 

取模数非常小,里面一定有循环节

 

 

 有k个循环节,ans就是

 

对于不是13的倍数,ans就是

那么对于13 的倍数

提出来一个13,然后除以13

 又回到上个数字

 

的时间

 

每个质因子都进行这种操作

然后乘回去

 

 

放在DAY 2   T3   数论  难题

 

放在T1  同余方程

T2  。。。。。

 

 

 

相当nim石子游戏

砍在黑格子哪一边,黑格子距离哪一端就变近

 就相当于4堆石子的nim

每次砍一刀,就相当拿出任意一些石子

 

判断^是否为0

先判断先手能否必胜

 算先手必败的情况,然后减

 

x,y,不能直接枚举,数据太大

 

数据结构优化枚举过程

那就只for  x,或者只for  y 

问有多少个式子满足

把左边 x 的 n 个可能的值,扔到数组里

 

然后枚举 y ,每次得到一个值,看看在数组里出现了多少次

 

问题也就转化为求一个数在数组里出现了多少次

 

cc=codechef.com

只有比赛,提供中文翻译,不用考虑时间问题,每场比赛10天,每个月月初,10道题,前6道的题难度接近NIOP提高组

 

 

 

 

 

分组不要求连续

 
哥德巴赫猜想

 

 

 

 。。。。。看脑子啦。。。。。

 

 

 

 

 

牛 ,-->USACO的题

ans一定是: 按照某种方式排序,第一头牛减最后一头牛

 

假设两头牛的坐标为(x1,y1),(x2,y2)

那么他们的曼哈顿距离就是:|x1-x2|+|y1-y2|

假设 x1>x2,那么 有两种情况:

1. y1>y2  --->  x1-x2+y1-y2

                       (x1+y1)-(x2+y2)

                       也就是说,按照每头牛的横纵坐标之和,排个序,最大的减去最小的

2.y1<y2   --->  x1-x2+y2-y1

                       (x1-y1)-(x2-y2)

                       也就是说,按照每头牛的横纵坐标之差,排个序,最大的减去最小的

 两遍排序就好,取max

P5098 [USACO2004OPEN]Cave Cows 3 洞穴里的牛之三

 
 
 

d<=1e18

 

 f[i][j] 从起点出发,走了i步,走到j的方案数
 
 

i-1步走到k,再走一步走到j

f[d][v]

O(d * n^2) 1e24

 

能否再快一点???

考虑当成一个n*n的矩阵

M^d  矩阵快速幂

矩阵乘法n^3  快速幂 log d 

复杂度大概1e10

 

虽然优化了,但还是过不了!!!

 
 看题看题,这个 k 还有奇奇怪的式子!?!?!
 

in 换一下维度顺序,不影响结果

 然后就变成了矩阵乘法

 

 乘法具有结合律
 

求 in * out 

复杂度O(k^3 logd)

把括号换个地方加一下

改变矩阵乘法运算顺序降低运算次数

 

 

 another problem
 
 给出一个N个点的树,树上每个点都有权值 a1,a2,a3,a4,.....an ,点权在int范围

M次询问,每次给出一个(p1,p2)

从 p1-->p2 的路径上找3个点,能不能找到组成三角形的3边,能就输出 yes  , 否则 no

 
暴力O(m * n^3) 

 

考虑路径上的数长成什么样子不能组成三角形???

  //  只需要输出能或者不能

斐波那契数列不能组成三角形

把p1-->p2的路径上的点权排个序

 

使得不能组成三角形

排序后,任何一个数字都大于前两个数之和

 

 

斐波那契数列是使得不能组成三角形,并且每个点的点权尽量小的序列

 

大约 f43>int

 一旦答案序列超过42,那么下一个数字一定<f43,有int,就一定有解YES,否则暴力

 

也就是看两点之间的距离>43,直接yes

否则暴力上跳

 

bzoj   树上三角形

 

 


 

OI文理结合

 分析是理科,翻译是文科
 

学OI的关键:NOIP前的暑假

 

多写题

两个web前两页,一个题不要落下

vijos    joyoj 

 

暴力出奇迹

 

posted @ 2019-07-21 11:38  晔子  阅读(213)  评论(0编辑  收藏  举报