联考20200617 T3 「雅礼集训 2018 Day8」C

题目传送门

分析:
跑去写了一下烷基计数(博客),这道题要先会求烷基的生成函数
我们假设求出来了烷基的生成函数为\(A\)
联考20200617 T3 「雅礼集训 2018 Day8」C_第1张图片
联考20200617 T3 「雅礼集训 2018 Day8」C_第2张图片
(蒟蒻表示被开除人籍了,看不大懂)
反正先照着式子写一下吧
(省选不退役再回来补吧2333)

upd:
退役失败,回来补坑
以下为口胡。。。
P函数是确定一个重心,四面接烷基的方案,使用Ploya定理去重
Q函数是去除沿某一条边为对称轴翻转同构,把那条边断开挤一个点在里面
S函数是P-Q里面多减去的两个重心的方案,需要加回来
(不太明白,这种神仙题考场上也写不出来的2333)

#include
#include
#include
#include

#define maxn 2000005
#define MOD 998244353

using namespace std;

inline int getint()
{
	int num=0,flag=1;char c;
	while((c=getchar())<'0'||c>'9')if(c=='-')flag=-1;
	while(c>='0'&&c<='9')num=num*10+c-48,c=getchar();
	return num*flag;
}

int N=100000;
int F[maxn],F2[maxn],F3[maxn],F4[maxn],rev[maxn];
int ans[maxn];
int Wl,Wl2,w[maxn];

inline int ksm(int num,int k)
{
	int ret=1;
	for(;k;k>>=1,num=1ll*num*num%MOD)if(k&1)ret=1ll*ret*num%MOD;
	return ret;
}
void init(int len)
{
	Wl=w[0]=1;
	while((Wl<<1)<=len)Wl<<=1;
	w[1]=ksm(3,(MOD-1)/(Wl<<1)),Wl2=Wl<<1;
	for(int i=2;i<=Wl2;i++)w[i]=1ll*w[i-1]*w[1]%MOD;
}
inline int upd(int x){return x>1]>>1)|(i&1?len>>1:0);}
inline void NTT(int *A,int len,int opt)
{
	for(int i=0;i>=1)
	{
		for(int j=0,t=i<<1;j>2);
	for(int i=0;i

联考20200617 T3 「雅礼集训 2018 Day8」C_第3张图片

你可能感兴趣的:(联考20200617 T3 「雅礼集训 2018 Day8」C)