打了预赛,感觉自己被各位dalao爆锤了
由于水平过低,改不了所有题,所以只是部分题解QWQ
E题:
给你整数n,m
求有多少种长度为n的整数序列
里面每个数都属于1~m
且1~m的每个偶数出现偶数次
答案对
1
0
9
+
7
10^9+7
109+7取模
n
⩽
1
0
1
8
n\leqslant 10^18
n⩽1018
m
⩽
2
∗
1
0
5
m\leqslant 2*10^5
m⩽2∗105
这道题啊,是我成功做出的第一道生成函数的题目
e
x
=
∑
i
x
i
i
!
e^x=\sum_{i}\frac{x^i}{i!}
ex=∑ii!xi
于是
e
x
+
e
−
x
2
=
∑
i
m
o
d
2
=
0
x
i
i
!
\frac{e^x+e^{-x}}{2}=\sum_{i\ mod\ 2=0}\frac{x^i}{i!}
2ex+e−x=∑i mod 2=0i!xi
那么,当
m
=
2
k
m=2k
m=2k
A
n
s
=
n
!
[
x
n
]
(
e
x
)
k
∗
(
e
x
+
e
−
x
2
)
k
Ans=n^k*(\frac{e^x+e^{-x}}{2})^k
Ans=nk∗(2ex+e−x)k
于是二项式展开统计一下答案即可
m为奇数类似
H题:
双端队列
每次插入或删除一个1616的01矩阵
然后操作后查询当前矩阵的乘积
蛮好玩的
操
作
数
⩽
5
∗
1
0
4
操作数\leqslant 5*10^4
操作数⩽5∗104
首先两个01矩阵的乘积可以通过压位在1616的时间内算出来
但,后面我们要怎么做呢…
萌新不会了…
然后scb大佬教会了我一个双端队列的套路
维护两个栈
插入插在第二个栈,删除在第一个栈
当第一个栈没东西时
考虑将第二个栈中的东西重构
把第二个栈前一半的东西放到第一个栈
每个元素会“迁徙”一次,这一次对应着"两次"(对半分,stack2也要重构)
放在这道题里面发现很合适