JZOJ6828. 【2020.10.25提高组模拟】幂
Description
TTT组数据,T≤1e5,n≤1e7T\le1e5,n\le1e7T≤1e5,n≤1e7
Solution
- 好家伙,最下面的数据范围居然是这样的:
- 直接以为卡特兰数乘上个组合数就能切了(
- 然而数据范围在读入的地方
这个看起来1e71e71e7的O(1)O(1)O(1)查询多半是递推吧。
因此写出dp,f(n),g(n)f(n),g(n)f(n),g(n)分别表示长度为nnn合法方案数以及贡献和。
讨论第一个是′x′'x'′x′还是′(′'('′(′,容易得到转移,以及对应的生成函数:
F(x)=1+xF(x)+x2F2(x)F(x)=1+xF(x)+x^2F^2(x) F(x)=1+xF(x)+x2F2(x)G(x)=xF(x)+xG(x)+2x2G(x)F(x)G(x)=xF(x)+xG(x)+2x^2G(x)F(x) G(x)=xF(x)+xG(x)+2x2G(x)F(x)
暴力解:
F(x)=1−x−1−2x−3x22xF(x)=\frac{1-x-\sqrt{1-2x-3x^2}}{2x} F(x)=2x1−x−1−2x−3x2
G(x)=1−x1−2x−3x2−12xG(x)=\frac{\frac{1-x}{\sqrt{1-2x-3x^2}}-1}{2x} G(x)=2x1−2x−3x21−x−1
关于F(x)F(x)F(x)的求根公式为什么是负号,考虑后面的东西开根是1−x+...1-x+...1−x+...,而F(x)F(x)F(x)没有负数次幂,因此分子部分常数项和一次项都被消掉了,所以要是负号(直接计算用洛必达法则计算极限也可以证明?)
那么问题在于求(1−2x−3x2)−0.5(1-2x-3x^2)^{-0.5}(1−2x−3x2)−0.5,剩下的都可以线性变换。
套用短多项式求幂的方法:
F(x)=Gk(x)F(x)=G^k(x)F(x)=Gk(x),lnF(x)=klnG(x)ln\ F(x)=k\ ln\ G(x)ln F(x)=k ln G(x)
求导得
F′(x)F(x)=kG′(x)G(x)\frac{F'(x)}{F(x)}=k\frac{G'(x)}{G(x)} F(x)F′(x)=kG(x)G′(x)F′(x)G(x)=kG′(x)F(x)F'(x)G(x)=kG'(x)F(x) F′(x)G(x)=kG′(x)F(x)
那么考虑第nnn项的系数,左边右边分别卷在一起,但是左边由于求了导数,所以涉及到了f(n+1)f(n+1)f(n+1),又由于G(x)G(x)G(x)是常数项的,所以系数相当于O(1)O(1)O(1)算出,可以从f(1..n)f(1..n)f(1..n)推到f(n+1)f(n+1)f(n+1)。
最后是常数项,一般根据题意猜出?这题由于是在整数域内开根号,常数项应该是正负1吧。
可以化简为:
(n+1)ansn−3n∗ansn−1−(n+3)ansn−2+(3n−6)ansn−3=0(n+1)ans_n-3n*ans_{n-1}-(n+3)ans_{n-2}+(3n-6)ans_{n-3}=0 (n+1)ansn−3n∗ansn−1−(n+3)ansn−2+(3n−6)ansn−3=0
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define maxn 10000005
#define ll long long
#define mo 998244353
using namespace std;int T,n,i,j,k;
ll f[maxn],inv[maxn];int main(){freopen("ceshi.in","r",stdin);
// freopen("power.in","r",stdin);
// freopen("power.out","w",stdout);inv[0]=inv[1]=1;for(i=2;i<maxn;i++) inv[i]=inv[mo%i]*(mo-mo/i)%mo;f[1]=1,f[2]=2;for(i=3;i<maxn-1;i++) f[i]=(f[i-1]*3*i+f[i-2]*(i+3)+f[i-3]*(6-3*i))%mo*inv[i+1]%mo;scanf("%d",&T);while (T--){scanf("%d",&n);printf("%lld\n",(f[n]+mo)%mo);}
}
JZOJ6828. 【2020.10.25提高组模拟】幂相关推荐
- 6810. 【2020.10.05提高组模拟】路哥
Description Input Output Sample Input Sample Input1 3 1 1 1 1 1 2 2 3 Sample Input2 9 4 0 0 1 4 1 2 ...
- JZOJ6893. 【2020.11.25提高组模拟】小 T 与灵石(stone)题解
这道题需要转化,换根和卡常. 首先将集合中的点拉出来,找它们的直径 不需要什么虚树,随便挑一个集合里的点为根,做一遍dfs,找最远点x(要在集合里),以x为根重复以上操作,找到最远点y,x-y就是题解 ...
- 6846. 【2020.11.02提高组模拟】旅人1970
Description Input Output Sample Input Sample Input1 25 4 4 1 2 3 2 1 1 1 2 Sample Output Sample Outp ...
- 6848. 【2020.11.03提高组模拟】融入社会的计划
Description Input Output 一行一个整数表示答案. upd: 无解输出-1. Sample Input Sample Input1 6 6 13 11 1 1 4 5 5 Sa ...
- jzoj6824-[2020.10.17提高组模拟]英雄联盟【期望】
正题 题目大意 开始暴击率为xxx,每次失败后都会增加xxx,成功后重置,然后求攻击1010610^{10^6}10106次后的暴击次数除以1010610^{10^6}10106 解题思路 定义ans ...
- gmoj 6860. 【2020.11.14提高组模拟】鬼渊传说
题目 Time Limits: 1000 ms Memory Limits: 518400 KB 简要题意 给出一个网格图,每个格子有黑白二色,求有多少个子矩形满足将其挖出来后恰好有一个黑色四连通块且 ...
- jzoj6826-[2020.10.17提高组模拟]隔膜【博弈论】
正题 题目大意 n∗nn*nn∗n的矩形,每一个人操作时如果棋盘上有一个k∗kk*kk∗k的矩形空地就可以选择一个点堵上.如果没有就失败了,求必胜方. 解题思路 如果场地上有一个位置堵上后即可堵上所有 ...
- 【2020.11.30提高组模拟】剪辣椒(chilli)
剪辣椒(chilli) 题目描述 在花园里劳累了一上午之后,你决定用自己种的干辣椒奖励自己. 你有n个辣椒,这些辣椒用n-1条绳子连接在一起,任意两个辣椒通过用若干个绳子相连,即形成一棵树. 你决定分 ...
- 【2020.12.03提高组模拟】袋鼠
题目 题目描述 你知道吗?乌拉圭的人口有345.7万,同时,仅澳大利亚就有4700万只袋鼠. 袋鼠决定入侵乌拉圭.袋鼠们将在平原上布阵,平原被划分成 n×mn \times mn×m 的网格. 每个格 ...
最新文章
- UNIX Domain Socket(UDS)是什么?同一台主机间进程间通信
- 敏捷开发的根本矛盾是什么?从业十余年的工程师在思考
- Zabbix监控agent
- python截图拼接_Python实现屏幕截图有两种方式 - 小众知识
- 我说我了解集合类,面试官竟然问我为啥HashMap的负载因子不设置成1!?
- 你应该知道的 CSS 基础知识
- linux 通配符与正则表达式
- IE无法执行JavaScript解决办法
- hdu4009 Transfer water 最小树形图
- 如何搭建公司知识库?
- 《私募股权基金投资基础知识》---第五章
- 采购证书有了解过吗?
- 微信群控系统源码的实现原理,核心源码实现,核心框架。
- 监控突然显示服务器故障,网络监控出现服务器故障怎么办
- 数据结构——栈(栈结构、栈面试题、栈的操作、栈结构实现、进制的转换)
- 计算机开机的四个画面,教你修改电脑开机时“欢迎使用”四个字!
- 腾讯地图定位 代码
- swagger Could not resolve pointer: /definitions/Person does not exist in document
- linux开发板lcd按压,嵌入式Linux裸机开发(十五)——LCD
- 【CSP-J/S】复赛注意事项