几何

 

 题目大意
定义一个$S-$四面体表示六条边由$S$根不同的木棍组成,定义一种染色方法合法当且仅当至少有$S$根木棍被染色且与每个顶点相邻的三根木棍中至多有一根被染色,求有$N$个$S=1,2...N$四面体,求至少染$K$个的方案数。

 

题解

单独考虑$S=1$四面体,染它有$9$中方案,否则将与每个顶点相邻的$12$条边单独拿出来计算。

考虑其余四面体被染色的方案数:他们中有$k$个顶点$(k=0,1,2,3,4)$相邻的木棍三条中有一条被染色,方案是$C_4^k\times 3^k$,剩余的边则有$\sum\limits_{i=S-k}^{6S-12}C_{6S-12}^{i}$,用乘法原理乘一下即可。

由于$k$很小,可以只求$\sum\limits_{i=S}^{6S-12}C_{6S-12}^{i}$,其余加上组合数即可。而这个式子是杨辉三角上的某一行的一个后缀,所以是可以递推的,考虑上一行答案对下一行答案的贡献,只需要乘二再加上上一行后缀左侧的那个组合数即可。

我们现在已经解决了每一个$S$的方案数,接下来就是求染出至少$K$个的方案数,也只需要递推,设$G_x$表示染$x$个的方案数$V$表示当染前四边形的方案数,$G_x=G_x+V\times G_{x-1}$。这是$N$个简单最高次项次数是一次的多项式的卷积,用分治$FFT$解决即可。

有两个细节,由于模数只有$10^5+3$,所以算组合数要用$lucas$定理。并且,$FFT$中每一位可能达到$10^{15}$级别,精度可能会爆炸,所以要优化或者使用$long\space double$。

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
#define LD long double
#define mod 100003
#define M 100020
using namespace std;
int read(){int nm=0,fh=1; int cw=getchar();for(;!isdigit(cw);cw=getchar()) if(cw=='-') fh=-fh;for(;isdigit(cw);cw=getchar()) nm=nm*10+(cw-'0');return nm*fh;
}
const int P[]={1,12,54,108,81};
const LD PI=3.141592653589793238462643383;
int mul(int x,int y){return (LL)x*(LL)y%mod;}
int add(int x,int y){return (x+y)>=mod?x+y-mod:x+y;}
int mus(int x,int y){return (x-y)<0?x-y+mod:x-y;}
void upd(int &x,int y){x=add(x,y);}
int qpow(int x,int sq){int res=1;for(;sq;sq>>=1,x=mul(x,x)) if(sq&1) res=mul(res,x);return res;
}
int n,m,fac[mod],ifac[mod],G[M<<2],lg[M<<2]; 
int C(int tot,int tk){if(tot<0||tk<0||tot<tk)return 0;return mul(fac[tot],mul(ifac[tot-tk],ifac[tk]));}
int lucas(int tot,int tk){if(!tk) return 1;return mul(C(tot%mod,tk%mod),lucas(tot/mod,tk/mod));}
int rev[M<<2],F[M<<2],S[M];
struct comp{LD r,d; comp(){r=d=0.0;}comp(LD _r,LD _d){r=_r,d=_d;}comp operator +(const comp&k)const{return comp(r+k.r,d+k.d);}comp operator -(const comp&k)const{return comp(r-k.r,d-k.d);}comp operator *(const comp&k)const{return comp(r*k.r-d*k.d,r*k.d+d*k.r);}
}A[M<<2],B[M<<2];
void FFT(comp *x,int len,LD kd){for(int i=1;i<len;i++) if(i<rev[i]) swap(x[i],x[rev[i]]);for(int tt=1;tt<len;tt<<=1){comp unit(cos(PI*kd/(tt*1.0)),sin(PI*kd/(tt*1.0)));for(int st=0;st<len;st+=(tt<<1)){comp now(1.0,0.0);for(int pos=st;pos<st+tt;pos++,now=now*unit){comp t1=x[pos],t2=x[pos+tt]*now;x[pos]=t1+t2,x[pos+tt]=t1-t2;}}}if(kd<0.0){for(int i=0;i<len;i++) x[i].r/=(len*1.0);}
}
void tms(int *x,int *x1,int *x2,int n1,int n2){if(n1+n2<=120){memset(S,0,sizeof(int)*(n1+n2+1));for(int i=0;i<=n1;i++){for(int j=0;j<=n2;j++) S[i+j]+=mul(x1[i],x2[j]);}for(int i=0;i<=n1+n2;i++) x[i]=S[i]%mod;}else{int len=1,nw=-1;for(;len<=n1+n2+1;len<<=1,nw++);for(int i=1;i<len;i++) rev[i]=(rev[i>>1]>>1)|((i&1)<<nw);for(int i=0;i<=n1;i++) A[i]=comp(x1[i]*1.0,0.0);for(int i=0;i<=n2;i++) B[i]=comp(x2[i]*1.0,0.0);for(int i=n1+1;i<=len;i++) A[i]=comp(0.0,0.0);for(int i=n2+1;i<=len;i++) B[i]=comp(0.0,0.0);FFT(A,len,1.0),FFT(B,len,1.0);for(int i=0;i<len;i++) A[i]=A[i]*B[i]; FFT(A,len,-1.0);for(int i=0;i<=n1+n2;i++) x[i]=llround(A[i].r)%mod;}
}
void solve(int *x,int L,int R){if(L==R){x[0]=1,x[1]=G[L];return;}int mid=((L+R)>>1),ls,rs; ls=mid-L+1,rs=R-mid;solve(x,L,mid),solve(x+ls+1,mid+1,R);tms(x,x,x+ls+1,ls,rs);
}
int main(){fac[0]=ifac[0]=1,G[1]=9,G[2]=243,G[3]=16224,G[4]=46489;for(int i=1;i<mod;i++) fac[i]=mul(fac[i-1],i),ifac[i]=qpow(fac[i],mod-2);for(int i=5,K,pre,last=3797,rem;i<M;i++){for(K=(i-2)*6,pre=K-6;pre<K;pre++) last=add(add(last,last),lucas(pre,i-2));last=mus(last,lucas(K,i-1)),rem=last;for(int k=0;k<=4;k++) upd(G[i],mul(P[k],rem)),upd(rem,lucas(K,i-k-1));}for(int T=read(),ans=0;T;--T,ans=0){n=read(),m=read(),solve(F,1,n);for(int i=n;i>=m;i--) upd(ans,F[i]);printf("%d\n",ans);}return 0;
}

转载于:https://www.cnblogs.com/OYJason/p/9751387.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/249353.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VUE的element-ui的使用

我们在自己的网站当中有的时候会用到element-ui的组建 1.如何安装element-ui的组件 在命令行工具当中输入cnpm i element-ui -S, 等待安装 2.如何在vue当中使用element-ui的组件 1.在main.js中引入element相关的js和cssimport Vue from vueimport ElementUI from element-u…

SpringBoot入门教程(一)详解intellij idea搭建SpringBoot

最近公司有一个内部比赛(黑客马拉松)&#xff0c;报名参加了这么一个赛事&#xff0c;在准备参赛作品的同时&#xff0c;由于参赛服务器需要自己搭建且比赛产生的代码不能外泄的&#xff0c;所以借着这个机会&#xff0c;本地先写了个测试的demo&#xff0c;来把tomcat部署相关…

文艺平衡树 Splay 学习笔记(1)

&#xff08;这里是Splay基础操作&#xff0c;reserve什么的会在下一篇里面讲&#xff09; 好久之前就说要学Splay了&#xff0c;结果苟到现在才学习。 可能是最近良心发现自己实在太弱了&#xff0c;听数学又听不懂只好多学点不要脑子的数据结构。 感觉Splay比Treap良心多了—…

AnswerOpenCV(1001-1007)一周佳作欣赏

外国不过十一&#xff0c;所以利用十一假期&#xff0c;看看他们都在干什么。一、小白问题http://answers.opencv.org/question/199987/contour-single-blob-with-multiple-object/ Contour Single blob with multiple objectHi to everyone. Im developing an object shape id…

云开发创建云函数

安装wx-server-sdk时候&#xff0c;终端报错如下&#xff1a; 解决方法&#xff1a; 运行&#xff1a;npm cache clean --force即可 转载于:https://www.cnblogs.com/moguzi12345/p/9758842.html

CSS3笔记之基础篇(一)边框

效果一、圆角效果 border-radius 实心上半圆&#xff1a; 方法&#xff1a;把高度(height)设为宽度&#xff08;width&#xff09;的一半&#xff0c;并且只设置左上角和右上角的半径与元素的高度一致&#xff08;大于也是可以的&#xff09;。 div {height:50px;/*是width…

CSS3笔记之基础篇(二)颜色和渐变色彩

效果一、颜色之RGBA RGB是一种色彩标准&#xff0c;是由红(R)、绿(G)、蓝(B)的变化以及相互叠加来得到各式各样的颜色。RGBA是在RGB的基础上增加了控制alpha透明度的参数。 语法&#xff1a; color&#xff1a;rgba(R,G,B,A) 以上R、G、B三个参数&#xff0c;正整数值的取值…

19_03_26校内训练[魔法卡片]

题意 有n张有序的卡片&#xff0c;每张卡片上恰有[1,m]中的每一个数&#xff0c;数字写在正面或反面。每次询问区间[l,r]&#xff0c;你可以将卡片上下颠倒&#xff0c;问区间中数字在卡片上方的并的平方和最大是多少。q,n*m≤1,000,000。 思考 一个很重要的性质&#xff0c;若…

CSS3笔记之基础篇(三)文字与字体

要点一、text-overflow与word-wrap text-overflow&#xff1a;设置是否使用一个省略标记&#xff08;...&#xff09;标示对象内文本的溢出。 word-wrap&#xff1a;设置文本行为&#xff0c;当前行超过指定容器的边界时是否断开转行。 语法如下&#xff1a; 注意&#xff1…

XV6操作系统代码阅读心得(二):进程

1. 进程的基本概念 从抽象的意义来说&#xff0c;进程是指一个正在运行的程序的实例&#xff0c;而线程是一个CPU指令执行流的最小单位。进程是操作系统资源分配的最小单位&#xff0c;线程是操作系统中调度的最小单位。从实现的角度上讲&#xff0c;XV6系统中只实现了进程&…

.Net Core 商城微服务项目系列(十二):使用k8s部署商城服务

一、简介 本篇我们将会把商城的服务部署到k8s中&#xff0c;同时变化的还有以下两个地方&#xff1a; 1.不再使用Consul做服务的注册和发现&#xff0c;转而使用k8s-dns来实现。 2.不再使用Ocelot作为业务网关&#xff0c;使用Traefik来实现。 正如上面所讲&#xff0c;服务发现…

CSS知识体系图谱

转自&#xff1a;https://blog.csdn.net/A13330069275/article/details/78448415

python2 pip安装包等出现各种编码错误UnicodeDecodeError: 'ascii'(/或者utf-8) codec can't decode byte 0xd2......

1.问题描述&#xff1a; python2环境&#xff0c;pip安装包时报错UnicodeDecodeError: ascii(/或者utf-8) codec cant decode byte 0xd2... 类似如下情况 2.原因分析 一开始依据网上给出的教程修改python安装路径下的各种文件&#xff0c;添加各种编码&#xff0c;始终无法解决…

leetcood学习笔记-111-二叉树的最小深度

题目描述&#xff1a; 第一次提交&#xff1a; class Solution(object):def minDepth(self, root):""":type root: TreeNode:rtype: int"""if not root:return 0if root.left and root.right:return min(self.minDepth(root.left)1,self.minDept…

IPV6 简单总结

1. 转帖别人的内容 来源&#xff1a;https://www.2cto.com/net/201112/114937.html 2. 本地用IPV6单播地址 (包括链路本地单播地址 和 站点本地单播地址) 2.1 链路本地单播地址 规定了链路本地和站点本地两种类型的本地使用单播地址。链路本地地址用在单链路上&#xff0c; 而…

面向对象第一单元总结

一、对面向对象的理解 有位同学给java的面向对象做了一个形象生动的类比&#xff0c;我觉得很有道理&#xff0c;大概按我的理解如下&#xff1a; 结构的形成看图之前&#xff0c;我们要先明白&#xff0c;世界上是先有了实体&#xff0c;才有了一步步抽象至以上的体系结构&…

理解HTML语义化

1、什么是HTML语义化&#xff1f; <基本上都是围绕着几个主要的标签&#xff0c;像标题&#xff08;H1~H6&#xff09;、列表&#xff08;li&#xff09;、强调&#xff08;strong em&#xff09;等等> 根据内容的结构化&#xff08;内容语义化&#xff09;&#xff0c;…

基本动态规划题集

观察下面的数字金字塔。写一个程序查找从最高点到底部任意处结束的路径&#xff0c;使路径经过数字的和最大。每一步可以从当前点走到左下方的点也可以到达右下方的点。 在上面的样例中,从13到8到26到15到24的路径产生了最大的和86。 【输入】 第一个行包含R(1≤ R≤1000)&…

python入门学习的第三天

step 1 时间 Python有两个模块&#xff0c;time和calendar&#xff0c;它们可以用于处理时间和日期 首先 import time 导入时间模块 然后 print time.time() 这个叫时间戳&#xff0c;它是从1970年1月1日午夜到现在时刻的秒数 print time.localtime(time.time()) print time.st…

.Net Core应用框架Util介绍(五)

上篇简要介绍了Util在Angular Ts方面的封装情况&#xff0c;本文介绍Angular封装的另一个部分&#xff0c;即Html的封装。 标准组件与业务组件 对于管理后台这样的表单系统&#xff0c;你通常会使用Angular Material或Ng-Zorro这样的UI组件库&#xff0c;它们提供了标准化的U…