洛谷P4841 城市规划(多项式求逆)
这题太珂怕了……如果是我的话完全想不出来……
- //minamoto
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- #define ll long long
- #define swap(x,y) (x^=y,y^=x,x^=y)
- #define mul(x,y) (1ll*(x)*(y)%P)
- #define add(x,y) (x+y>=P?x+y-P:x+y)
- #define dec(x,y) (x-y<0?x-y+P:x-y)
- using namespace std;
- const int N=,P=;
- inline int ksm(int a,ll b){
- int res=;
- while(b){
- if(b&) res=mul(res,a);
- a=mul(a,a),b>>=;
- }
- return res;
- }
- int n,r[N],A[N],B[N],fac[N],finv[N],O[N],C[N],F[N],G[N];
- inline void init(){
- fac[]=fac[]=finv[]=;
- for(int i=;i<=n;++i) fac[i]=mul(fac[i-],i);
- finv[n]=ksm(fac[n],P-);
- for(int i=n-;i;--i) finv[i]=mul(finv[i+],i+);
- }
- void NTT(int *A,int type,int len){
- int limit=,l=;
- while(limit<len) limit<<=,++l;
- for(int i=;i<limit;++i)
- r[i]=(r[i>>]>>)|((i&)<<(l-));
- for(int i=;i<limit;++i)
- if(i<r[i]) swap(A[i],A[r[i]]);
- for(int mid=;mid<limit;mid<<=){
- int R=mid<<,Wn=ksm(,(P-)/R);O[]=;
- for(int j=;j<mid;++j) O[j]=mul(O[j-],Wn);
- for(int j=;j<limit;j+=R){
- for(int k=;k<mid;++k){
- int x=A[j+k],y=mul(O[k],A[j+k+mid]);
- A[j+k]=add(x,y),A[j+k+mid]=dec(x,y);
- }
- }
- }
- if(type==-){
- reverse(A+,A+limit);
- for(int i=,inv=ksm(limit,P-);i<limit;++i)
- A[i]=mul(A[i],inv);
- }
- }
- void Inv(int *a,int *b,int len){
- if(len==) return (void)(b[]=ksm(a[],P-));
- Inv(a,b,len>>);
- for(int i=;i<len;++i) F[i]=a[i],G[i]=b[i];
- NTT(F,,len<<),NTT(G,,len<<);
- for(int i=;i<(len<<);++i)
- F[i]=mul(mul(F[i],G[i]),G[i]);
- NTT(F,-,len<<);
- for(int i=;i<len;++i) b[i]=(1ll*(b[i]<<)%P+P-F[i])%P;
- }
- int main(){
- // freopen("testdata.in","r",stdin);
- scanf("%d",&n);init();
- int len=;for(len=;len<=(n*);len<<=);
- A[]=;
- for(int i=;i<=n;++i) A[i]=mul(ksm(,1ll*i*(i-)/),finv[i]);
- Inv(A,B,len);
- for(int i=;i<=n;++i) C[i]=mul(ksm(,1ll*i*(i-)/),finv[i-]);
- NTT(B,,len),NTT(C,,len);
- for(int i=;i<len;++i) B[i]=mul(B[i],C[i]);
- NTT(B,-,len);
- printf("%d\n",mul(B[n],fac[n-]));
- return ;
- }
洛谷P4841 城市规划(多项式求逆)的更多相关文章
- 【洛谷4238】 多项式求逆(NTT,分治)
前言 多项式求逆还是爽的一批 Solution 考虑分治求解这个问题. 直接每一次NTT一下就好了. 代码实现 #include<stdio.h> #include<stdlib.h ...
- 多项式求逆元详解+模板 【洛谷P4238】多项式求逆
概述 多项式求逆元是一个非常重要的知识点,许多多项式操作都需要用到该算法,包括多项式取模,除法,开跟,求ln,求exp,快速幂.用快速傅里叶变换和倍增法可以在$O(n log n)$的时间复杂度下求出 ...
- 洛谷.4238.[模板]多项式求逆(NTT)
题目链接 设多项式\(f(x)\)在模\(x^n\)下的逆元为\(g(x)\) \[f(x)g(x)\equiv 1\ (mod\ x^n)\] \[f(x)g(x)-1\equiv 0\ (mod\ ...
- 洛谷 P4238 [模板] 多项式求逆
题目:https://www.luogu.org/problemnew/show/P4238 看博客:https://www.cnblogs.com/xiefengze1/p/9107752.html ...
- 洛谷P4841 城市规划(生成函数 多项式求逆)
题意 链接 Sol Orz yyb 一开始想的是直接设\(f_i\)表示\(i\)个点的无向联通图个数,枚举最后一个联通块转移,发现有一种情况转移不到... 正解是先设\(g(n)\)表示\(n\)个 ...
- 洛谷P4841 城市规划 [生成函数,NTT]
传送门 题意简述:求\(n\)个点的简单无向连通图的数量\(\mod \;1004535809\),\(n \leq 130000\) 经典好题呀!这里介绍两种做法:多项式求逆.多项式求对数 先 ...
- BZOJ 3456: 城市规划 多项式求逆
Description 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了. 刚才说过, 阿狸的国家有n个城市, 现在国家需要在某些城市对之间建立一些贸易路线, 使得整个国家的任意两个城市都直接 ...
- 洛谷 P4841 城市规划 解题报告
P4841 城市规划 题意 n个有标号点的简单(无重边无自环)无向连通图数目. 输入输出格式 输入格式: 仅一行一个整数\(n(\le 130000)\) 输出格式: 仅一行一个整数, 为方案数 \( ...
- 【BZOJ3456】城市规划 多项式求逆
[BZOJ3456]城市规划 Description 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了. 刚才说过, 阿狸的国家有n个城市, 现在国家需要在某些城市对之间建立一些贸易路线, 使得 ...
- 洛谷 P4841 城市规划
构造简单无向图的EGF: \[ G(x)=\sum_{i}^{\infty}2^{\binom{i}{2}}\cdot\frac{x^i}{i!} \] 构造简单无向连通图的EGF: \[ F(x)= ...
随机推荐
- centos下的hadoop集群实现ssh的无密码登陆
CentOS 下SSH无密码登录的配置 最近学习Hadoop.它要求各节点之间通过SSH无密码登录,配置SSH的时候费了一番功夫,记录下来,以备忘. 配置SSH无密码登录需要3步: 1.生成公钥和私钥 ...
- Objective-C面向对象-对象和类
文章都是先由本人个人博客:孙占兴:www.teilim.com,先更新,随后CSDN博客才会更新,掌握第一动态请关注本人主站. 原文链接:http://www.teilim.com/objective ...
- Distributed Management Task Force----分布式管理任务组
http://baike.baidu.com/link?url=Y9HGLs8Qj6pXbbgY6xPdfiGDsQO8Eu1e80B4giQtQ_hAfGNF59byxnLoERYri4Duw7Gw ...
- 怎样搭建svn本地server,管理本地的代码
搭建svn本地server,以下是详细的步骤介绍. 一.准备工作 1.下载svnserver端:Subversion. 到官方站点(http://s version.tigris.org/)下载最新的 ...
- appium 控件定位
转自:http://www.2cto.com/kf/201410/340345.html AppiumDriver的各种findElement方法的尝试,尝试的目标应用是SDK自带的Notepad应用 ...
- 小程序 swiper banner 图片 居中
var imgUrlApp = getApp().globalData.imgUrlApp; Page({ /** * 页面的初始数据 */ data: { indicatorDots: true, ...
- 处理TCP连包的一小段代码
学习网络编程也有一段时间了,一直听说TCP数据会连包,但一直不知道怎么测试好.最近测试了下:发送方使用对列,将发送的数据存入队列,然后开线程,专门发送.发送多包数据之间不延时.在接收方,他们确实连在一 ...
- local_irq_disable
local_irq_disable 仅仅是 设置 当前CPU 的中断屏蔽位 disable_irq 是禁用 全部cpu 中断(只是当前irq) 如果你要禁止所有的中断该怎么办? 在2.6内核中,可以通 ...
- IDEA中使用git详细步骤
1.idea中配置git 设置 版本控制 git 配置git的执行路径(git.ext) 2.把项目推送到远程仓库(码云项目管理) a.在码云创建一个项目 b.复制项目的URL c.找到要上传到码云管 ...
- 创建一个Windows Service 程序
1.新建Windows项目,选择"Windows服务"类型的项目. 2.在生成的Service1.cs中代码中写你需要的代码,如下: using System; using Sys ...