第一眼似乎很困难,实际上非常简单(

好吧这题我做了一个小时(

首先期望具有线性性,我们转化为计算点对对答案的贡献。

发现相对位置一样的点对对答案的贡献是一样的。我们把相对位置一样的点对铃出来,乘了之后求和再计算贡献。

把点对拎出来是一个卷积,很容易做掉。

贡献考虑把两半边的方案数乘起来。

如果形如 \((y,y+i\bmod n)\) 的点对积之和为 \(g[i]\),有 \(i\) 个点的圆划分方案数为 \(f[i]\),前者加上强制连接 \((1,n)\) 的方案数为 \(t[i]\),那么答案为:

\[\frac{\sum_{i=1}^{n-1}g[i]t[i+1]t[n-i+1]}{4f[n]}
\]

容易得到 \(2t[i]=f[i]\),那么:

\[\frac{\sum_{i=1}^{n-1}g[i]f[i+1]f[n-i+1]}{8f[n]}
\]

\(g\) 很容易求得,考虑 \(f\)。

容易发现,\(f\) 相当于计算序列上若干条线段互不“相交”的方案数。容易发现不“相交”只有两种可能:包含或两条线段中间夹着空格。

我们直接考虑 GF。

容易写出 DP:

\[f[n]=2f[n-1]+\sum_{i=2}^{n-1}f[i]f[n-i]
\]

下面重新定义新的 \(f[n]\) 为旧的 \(f[n+1]\):

\[f[n]=2f[n-1]+\sum_{i=1}^{n-1}f[i]f[n-i]
\]
\[F(x)=2xF(x)+F^2(x)-2F(x)+2
\]
\[F(x)=\frac{3-2x\pm\sqrt{4x^2-12x+1}}{2}
\]

然后我们知道 \(F(0)=1\),所以试一下:

\[\frac{3+\sqrt{1}}{2}=2,\frac{3-\sqrt{1}}{2}=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:

\[H'(x)=\frac{4x-6}{\sqrt{4x^2-12x+1}}
\]
\[H(x)=\frac{4x^2-12x+1}{4x-6}\times H'(x)
\]
\[(4x-6)H(x)=(4x^2-12x+1)H'(x)
\]
\[4H[n-1]-6H[n]=4(n-1)H[n-1]-12nH[n]+(n+1)H[n+1]
\]
\[H[n+1]=\frac{(12n-6)H[n]-4(n-2)H[n-1]}{n+1}
\]

递推即可。

#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题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. Java--面向对象设计

    [转载自本科老师上课课件] 问题一: 在一个软件的功能模块中,需要一种图像处理的功能.该图像处理的策略(如何处理)与图像的内容是相关的.如:卫星的运行图片,使用策略A处理方式,如果是卫星内云图片,则需 ...

  2. k8s之yaml文件详解

    k8s之yaml文件详解 目录 k8s之yaml文件详解 1. k8s支持的文件格式 2. YAML语言格式 3. 查看api资源版本标签 4. 编写nginx-test.yaml资源配置清单 4.1 ...

  3. Codeforces Round #756 (Div. 3)

    本场战绩:+451 题目如下: A. Make Even time limit per test 1 second memory limit per test 256 megabytes input ...

  4. 赠送4本《 PHP 程序员面试笔试宝典》

    < PHP 程序员面试笔试宝典>历时一年,由机械工业出版社出版,在 2018 年 11 月问世.全书共八个章节,涉及 面试笔试经验技巧.PHP 基础知识.PHP 进阶知识,PHP 面向对象 ...

  5. PHP实习生面试准备的建议

    你好,是我琉忆.PHP程序员面试笔试图书系列作者. 今天就跟大家聊聊作为一个PHP程序员,每年的跳槽季都应该怎么准备一番. 其实普遍的跳槽季总的就有2个. 分别是新年后的3-4月,还有9-10月份. ...

  6. suse 12 二进制部署 Kubernetets 1.19.7 - 第09章 - 部署kubelet组件

    文章目录 1.9.部署kubelet 1.9.0.创建kubelet bootstrap kubeconfig文件 1.9.1.创建kubelet配置文件 1.9.2.配置kubelet为system ...

  7. JVM基础学习(一):JVM内存模型

    在Java进阶知识的学习中,JVM都是避不过去的一关,我个人对于JVM的理解其实就是相当于在操作系统的外层再加了一层中间层,从来屏蔽了具体硬件之间的不同实现,使得Java实现了最重要的特性:一次编译, ...

  8. netty介绍与构成

    什么是 Netty Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架.Netty 提供高性能和可扩展性,让你可以自由地专注于你真 ...

  9. 解决:阿里云服务器被植入挖矿程序后修改密码失败的问题(报错:passwd: Authentication token manipulation error)

    如下图,在修改密码的时候会报错 原因: 通常不能修改密码都是/etc/passwd文件或者/etc/shadow文件被锁住了 解决: 检查/etc/passwd文件和/etc/shadow文件是否被锁 ...

  10. 轩辕展览-VR虚拟展厅设计如何实现全景漫游功能

    什么是在线3d漫游?如何在VR虚拟展厅设计之中实现3d漫游功能?让我们来分享3dVR虚拟展厅的在线漫游. 实际上,在线3d漫游就是通过3d仿真场景,使用鼠标和键盘在虚拟空间之中自由漫游,它可以从高空俯 ...