LGP6694题解
第一眼似乎很困难,实际上非常简单(
好吧这题我做了一个小时(
首先期望具有线性性,我们转化为计算点对对答案的贡献。
发现相对位置一样的点对对答案的贡献是一样的。我们把相对位置一样的点对铃出来,乘了之后求和再计算贡献。
把点对拎出来是一个卷积,很容易做掉。
贡献考虑把两半边的方案数乘起来。
如果形如 \((y,y+i\bmod n)\) 的点对积之和为 \(g[i]\),有 \(i\) 个点的圆划分方案数为 \(f[i]\),前者加上强制连接 \((1,n)\) 的方案数为 \(t[i]\),那么答案为:
\]
容易得到 \(2t[i]=f[i]\),那么:
\]
\(g\) 很容易求得,考虑 \(f\)。
容易发现,\(f\) 相当于计算序列上若干条线段互不“相交”的方案数。容易发现不“相交”只有两种可能:包含或两条线段中间夹着空格。
我们直接考虑 GF。
容易写出 DP:
\]
下面重新定义新的 \(f[n]\) 为旧的 \(f[n+1]\):
\]
\]
\]
然后我们知道 \(F(0)=1\),所以试一下:
\]
所以应该是 \(F(x)=\frac{3-2x-\sqrt{4x^2-12x+1}}{2}\)。
如何求出 \(F(x)\)?我们实际上只需要求出 \(\sqrt{4x^2-12x+1}\)。
设 \(H(x)=\sqrt{4x^2-12x+1}\),然后求导列一个 ODE:
\]
\]
\]
\]
\]
递推即可。
#include<cstdio>
typedef unsigned ui;
const ui M=1<<19|1,G=3,mod=998244353;
ui n,f[M],g[M],c[M];
inline ui pow(ui a,ui b=mod-2){
ui ans(1);for(;b;b>>=1,a=1ull*a*a%mod)if(b&1)ans=1ull*ans*a%mod;return ans;
}
inline ui Add(const ui&a,const ui&b){
return a+b>=mod?a+b-mod:a+b;
}
inline ui Del(const ui&a,const ui&b){
return b>a?a-b+mod:a-b;
}
inline void swap(ui&a,ui&b){
ui c=a;a=b;b=c;
}
inline void DFT(ui*f,const ui&n){
static ui W[M];
for(ui len=n>>1;len>=1;len>>=1){
const ui&w1=pow(G,(mod-1>>1)/len);W[0]=1;W[1]=w1;
for(ui i=2;i<len;++i)W[i]=1ull*W[i-1]*w1%mod;
for(ui k=0;k<n;k+=len<<1){
ui*w=W,*fl=f+(k),*fr=f+(k|len);
for(ui i=0;i<len;++i){
const ui x=*fl,y=*fr;
*fl++=Add(x,y);*fr++=1ull**w++*Del(x,y)%mod;
}
}
}
}
inline void IDFT(ui*f,const ui&n){
static ui W[M];
for(ui len=1;len<n;len<<=1){
const ui&w1=pow(G,(mod-1>>1)/len);W[0]=1;W[1]=w1;
for(ui i=2;i<len;++i)W[i]=1ull*W[i-1]*w1%mod;
for(ui k=0;k<n;k+=len<<1){
ui*w=W,*fl=f+(k),*fr=f+(k|len);
for(ui i=0;i<len;++i){
const ui x=*fl,y=1ull**w++**fr%mod;
*fl++=Add(x,y);*fr++=Del(x,y);
}
}
}
const ui&inv=pow(n);
for(ui i=1;(i<<1)<n;++i)swap(f[i],f[n-i]);
for(ui i=0;i<n;++i)f[i]=1ull*f[i]*inv%mod;
}
signed main(){
ui len(1),ans(0);
scanf("%u",&n);c[0]=1;c[1]=1;
for(ui i=2;i<n;++i)c[i]=1ull*(mod-mod/i)*c[mod%i]%mod;
c[0]=1;c[1]=mod-6;
for(ui i=2;i<n;++i)c[i]=((12ull*i-18)*c[i-1]+(mod+12-4ull*i)*c[i-2])%mod*c[i]%mod;
for(ui i=0;i<n;++i)c[i]=mod-c[i];c[0]=(c[0]+3)%mod;c[1]=(c[1]-2)%mod;{
const ui&inv=mod+1>>1;
for(ui i=0;i<=n;++i)c[i]=1ull*c[i]*inv%mod;
}
for(ui i=0;i<n;++i)scanf("%u",f+i),g[i]=g[n+i]=f[i];
for(ui i=0;(i<<1|1)<n;++i)swap(f[i],f[n-i-1]);
while(len<n*3)len<<=1;
DFT(f,len);DFT(g,len);
for(ui i=0;i<len;++i)f[i]=1ull*f[i]*g[i]%mod;
IDFT(f,len);
for(ui i=1;i<n;++i)ans=(ans+1ull*c[i]*c[n-i]%mod*f[n+i-1])%mod;
printf("%u",1ull*ans*pow(8ull*c[n-1]%mod)%mod);
}
LGP6694题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- JS 将Table内容导出到Excel(样式设计)
转载请注明来源:https://www.cnblogs.com/hookjc/ function saveAsExcel(tableID){ var tb = new TableToExcel(tab ...
- Mac 屏幕录制Gif 制作 By-胡罗
一.视频录制 1)使用Mac系统自带的QuickTime进行屏幕录像 手动打开(如下图) 详细 Mac 基础教程:如何使用 Mac 系统原生的屏幕录制功能 相关快捷键 option+command+n ...
- LVS+Keepalived 高可用群集部署
LVS+Keepalived 高可用群集部署 1.LVS+Keepalived 高可用群集概述 2.LVS+Keepalived高可用群集部署 1.LVS+Keepalived 高可用群集概述: LV ...
- Java判断是否是回文字符串
public static boolean isPalindrome(String str) { int start = 0, end = str.length() - 1; while (start ...
- Kubernets-初见
只是入门文档. 使用 linux 通过 java -jar 方式部署单体架构,war 包丢tomcat. 使用 Docker部署微服务架构. 使用 K8s Pod 进行部署 一个一个 服务 命令 je ...
- 一文说透https中的s是什么?
一.HTTP 与 HTTPS 有哪些区别? 1. HTTP 是超文本传输协议,信息是明文传输,存在安全风险.HTTPS ,是在 TCP 和网络层之间加入了 SSL/TLS 安全协议,也就是安全套接字层 ...
- Solution -「多校联训」自动机
\(\mathcal{Description}\) Link. 有一个状态集为 \(V\) 的自动机,状态接收 (, ) 和 _(空格) 三种字符,分别编号为 \(0,1,2\),状态 \(u ...
- Dubbo源码剖析六之SPI扩展点的实现之getExtensionLoader
Dubbo SPI机制之三Adaptive自适应功能 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中,示例案例中自定义了扩展接口而不是使用Dubbo已提供的扩展接口.在案例中,主程序分 ...
- 继承及super关键字
继承 继承的本质是对某一批类的抽象,从而实现对世界更好的建模 extend的意思是"扩展",子类是父类的扩展. Java中类只有单继承,没有多继承:儿子只能有一个亲生爸爸,一个爸爸 ...
- 【Java分享客栈】我为什么极力推荐XXL-JOB作为中小厂的分布式任务调度平台
前言 大家好,我是福隆苑居士,今天给大家聊聊XXL-JOB的使用. XXL-JOB是本人呆过的三家公司都使用到的分布式任务调度平台,前两家都是服务于传统行业(某大型移动基地和某大型电网),现在 ...