传送门

这题太珂怕了……如果是我的话完全想不出来……

题解

  1. //minamoto
  2. #include<iostream>
  3. #include<cstdio>
  4. #include<algorithm>
  5. #define ll long long
  6. #define swap(x,y) (x^=y,y^=x,x^=y)
  7. #define mul(x,y) (1ll*(x)*(y)%P)
  8. #define add(x,y) (x+y>=P?x+y-P:x+y)
  9. #define dec(x,y) (x-y<0?x-y+P:x-y)
  10. using namespace std;
  11. const int N=,P=;
  12. inline int ksm(int a,ll b){
  13. int res=;
  14. while(b){
  15. if(b&) res=mul(res,a);
  16. a=mul(a,a),b>>=;
  17. }
  18. return res;
  19. }
  20. int n,r[N],A[N],B[N],fac[N],finv[N],O[N],C[N],F[N],G[N];
  21. inline void init(){
  22. fac[]=fac[]=finv[]=;
  23. for(int i=;i<=n;++i) fac[i]=mul(fac[i-],i);
  24. finv[n]=ksm(fac[n],P-);
  25. for(int i=n-;i;--i) finv[i]=mul(finv[i+],i+);
  26. }
  27. void NTT(int *A,int type,int len){
  28. int limit=,l=;
  29. while(limit<len) limit<<=,++l;
  30. for(int i=;i<limit;++i)
  31. r[i]=(r[i>>]>>)|((i&)<<(l-));
  32. for(int i=;i<limit;++i)
  33. if(i<r[i]) swap(A[i],A[r[i]]);
  34. for(int mid=;mid<limit;mid<<=){
  35. int R=mid<<,Wn=ksm(,(P-)/R);O[]=;
  36. for(int j=;j<mid;++j) O[j]=mul(O[j-],Wn);
  37. for(int j=;j<limit;j+=R){
  38. for(int k=;k<mid;++k){
  39. int x=A[j+k],y=mul(O[k],A[j+k+mid]);
  40. A[j+k]=add(x,y),A[j+k+mid]=dec(x,y);
  41. }
  42. }
  43. }
  44. if(type==-){
  45. reverse(A+,A+limit);
  46. for(int i=,inv=ksm(limit,P-);i<limit;++i)
  47. A[i]=mul(A[i],inv);
  48. }
  49. }
  50. void Inv(int *a,int *b,int len){
  51. if(len==) return (void)(b[]=ksm(a[],P-));
  52. Inv(a,b,len>>);
  53. for(int i=;i<len;++i) F[i]=a[i],G[i]=b[i];
  54. NTT(F,,len<<),NTT(G,,len<<);
  55. for(int i=;i<(len<<);++i)
  56. F[i]=mul(mul(F[i],G[i]),G[i]);
  57. NTT(F,-,len<<);
  58. for(int i=;i<len;++i) b[i]=(1ll*(b[i]<<)%P+P-F[i])%P;
  59. }
  60. int main(){
  61. // freopen("testdata.in","r",stdin);
  62. scanf("%d",&n);init();
  63. int len=;for(len=;len<=(n*);len<<=);
  64. A[]=;
  65. for(int i=;i<=n;++i) A[i]=mul(ksm(,1ll*i*(i-)/),finv[i]);
  66. Inv(A,B,len);
  67. for(int i=;i<=n;++i) C[i]=mul(ksm(,1ll*i*(i-)/),finv[i-]);
  68. NTT(B,,len),NTT(C,,len);
  69. for(int i=;i<len;++i) B[i]=mul(B[i],C[i]);
  70. NTT(B,-,len);
  71. printf("%d\n",mul(B[n],fac[n-]));
  72. return ;
  73. }

洛谷P4841 城市规划(多项式求逆)的更多相关文章

  1. 【洛谷4238】 多项式求逆(NTT,分治)

    前言 多项式求逆还是爽的一批 Solution 考虑分治求解这个问题. 直接每一次NTT一下就好了. 代码实现 #include<stdio.h> #include<stdlib.h ...

  2. 多项式求逆元详解+模板 【洛谷P4238】多项式求逆

    概述 多项式求逆元是一个非常重要的知识点,许多多项式操作都需要用到该算法,包括多项式取模,除法,开跟,求ln,求exp,快速幂.用快速傅里叶变换和倍增法可以在$O(n log n)$的时间复杂度下求出 ...

  3. 洛谷.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\ ...

  4. 洛谷 P4238 [模板] 多项式求逆

    题目:https://www.luogu.org/problemnew/show/P4238 看博客:https://www.cnblogs.com/xiefengze1/p/9107752.html ...

  5. 洛谷P4841 城市规划(生成函数 多项式求逆)

    题意 链接 Sol Orz yyb 一开始想的是直接设\(f_i\)表示\(i\)个点的无向联通图个数,枚举最后一个联通块转移,发现有一种情况转移不到... 正解是先设\(g(n)\)表示\(n\)个 ...

  6. 洛谷P4841 城市规划 [生成函数,NTT]

    传送门 题意简述:求\(n​\)个点的简单无向连通图的数量\(\mod \;1004535809​\),\(n \leq 130000​\) 经典好题呀!这里介绍两种做法:多项式求逆.多项式求对数 先 ...

  7. BZOJ 3456: 城市规划 多项式求逆

    Description 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了.  刚才说过, 阿狸的国家有n个城市, 现在国家需要在某些城市对之间建立一些贸易路线, 使得整个国家的任意两个城市都直接 ...

  8. 洛谷 P4841 城市规划 解题报告

    P4841 城市规划 题意 n个有标号点的简单(无重边无自环)无向连通图数目. 输入输出格式 输入格式: 仅一行一个整数\(n(\le 130000)\) 输出格式: 仅一行一个整数, 为方案数 \( ...

  9. 【BZOJ3456】城市规划 多项式求逆

    [BZOJ3456]城市规划 Description 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了. 刚才说过, 阿狸的国家有n个城市, 现在国家需要在某些城市对之间建立一些贸易路线, 使得 ...

  10. 洛谷 P4841 城市规划

    构造简单无向图的EGF: \[ G(x)=\sum_{i}^{\infty}2^{\binom{i}{2}}\cdot\frac{x^i}{i!} \] 构造简单无向连通图的EGF: \[ F(x)= ...

随机推荐

  1. centos下的hadoop集群实现ssh的无密码登陆

    CentOS 下SSH无密码登录的配置 最近学习Hadoop.它要求各节点之间通过SSH无密码登录,配置SSH的时候费了一番功夫,记录下来,以备忘. 配置SSH无密码登录需要3步: 1.生成公钥和私钥 ...

  2. Objective-C面向对象-对象和类

    文章都是先由本人个人博客:孙占兴:www.teilim.com,先更新,随后CSDN博客才会更新,掌握第一动态请关注本人主站. 原文链接:http://www.teilim.com/objective ...

  3. Distributed Management Task Force----分布式管理任务组

    http://baike.baidu.com/link?url=Y9HGLs8Qj6pXbbgY6xPdfiGDsQO8Eu1e80B4giQtQ_hAfGNF59byxnLoERYri4Duw7Gw ...

  4. 怎样搭建svn本地server,管理本地的代码

    搭建svn本地server,以下是详细的步骤介绍. 一.准备工作 1.下载svnserver端:Subversion. 到官方站点(http://s version.tigris.org/)下载最新的 ...

  5. appium 控件定位

    转自:http://www.2cto.com/kf/201410/340345.html AppiumDriver的各种findElement方法的尝试,尝试的目标应用是SDK自带的Notepad应用 ...

  6. 小程序 swiper banner 图片 居中

    var imgUrlApp = getApp().globalData.imgUrlApp; Page({ /** * 页面的初始数据 */ data: { indicatorDots: true, ...

  7. 处理TCP连包的一小段代码

    学习网络编程也有一段时间了,一直听说TCP数据会连包,但一直不知道怎么测试好.最近测试了下:发送方使用对列,将发送的数据存入队列,然后开线程,专门发送.发送多包数据之间不延时.在接收方,他们确实连在一 ...

  8. local_irq_disable

    local_irq_disable 仅仅是 设置 当前CPU 的中断屏蔽位 disable_irq 是禁用 全部cpu 中断(只是当前irq) 如果你要禁止所有的中断该怎么办? 在2.6内核中,可以通 ...

  9. IDEA中使用git详细步骤

    1.idea中配置git 设置 版本控制 git 配置git的执行路径(git.ext) 2.把项目推送到远程仓库(码云项目管理) a.在码云创建一个项目 b.复制项目的URL c.找到要上传到码云管 ...

  10. 创建一个Windows Service 程序

    1.新建Windows项目,选择"Windows服务"类型的项目. 2.在生成的Service1.cs中代码中写你需要的代码,如下: using System; using Sys ...