几何

 

 题目大意
定义一个$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…

NodeJS+Express+Mysql+MongoDB之环境配置

node作为一款可以兼容前后端的js语言,在做持久层操作上和Java比较类似,下面就简单介绍一下项目中的数据库配置操作. 首选使用express框架自动创建一个测试项目,并在目录下建立一个专门存放数据库配置的配置文件,比如:db.js 代码如下 /* * 数据库配置文件 * Author: zth * D…

Python 私有变量的访问和赋值

首先我们这里先描述下&#xff1a;  Python中&#xff0c;变量名类似__x__的&#xff0c;以双下划线开头&#xff0c;并且以双下划线结尾的&#xff0c;是特殊变量&#xff0c;特殊变量是可以直接访问的&#xff08;比如 __doc__, __init__等&#xff09;&#xff0c;不是pri…

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

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

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

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

JS使用XMLHttpRequest对象POST收发JSON格式数据

JavaScirpt中的XMLHttpRequest对象提供了对 HTTP 协议的完全访问&#xff0c;使用该对象可以在不刷新页面的情况与服务器交互数据。XMLHttpRequest是实现AJAX技术的关键对象&#xff0c;本站曾整理过一篇介绍该对象的文章&#xff1a; JS使用XMLHttpRequest对象与服务器进行数据…

ShopXO本地化部署安装之centeros 安装Apache2.4.6 + PHP7.0.33 + Mysql5.7.25环境

对于centerOS安装PHP环境&#xff0c;目前网上的帖子都已经比较成熟&#xff0c;具体步骤大家可以自行搜索查看&#xff0c;但是在安装过程中遇到的一些小细节&#xff0c;这些内容往往需要结合多个帖子才能找到答案&#xff0c;在这里简单记录一下。 细节一 如果使用的阿里云…

Spring Boot 扩展点应用之工厂加载机制

Spring 工厂加载机制&#xff0c;即 Spring Factories Loader&#xff0c;核心逻辑是使用 SpringFactoriesLoader 加载由用户实现的类&#xff0c;并配置在约定好的META-INF/spring.factories 路径下&#xff0c;该机制可以为框架上下文动态的增加扩展。 该机制类似于 Java SPI…

Vue.js使用-http请求

Vue.js使用-ajax使用 1.为什么要使用ajax 前面的例子&#xff0c;使用的是本地模拟数据&#xff0c;通过ajax请求服务器数据。 2.使用jquery的ajax库示例 new Vue({el: #app,data: {searchQuery: ,columns: [{name: name, iskey: true}, {name: age},{name: sex, dataSource:…

跨域(Cross-Domain) AJAX for IE8 and IE9

1、有过这样一段代码&#xff0c;是ajax $.ajax({url: "http://127.0.0.1:9001",type: "POST",data: JSON.stringify({"reqMsg":"12345"}),dataType: json,timeout: 1000 * 30,success: function (response) {if(response.n6){dosomet…

移动WEB的页面布局

随着移动互联网的日益普遍&#xff0c;现在移动版本的web应用也应用而生&#xff0c;那么在做移动web页面布局的过程中&#xff0c;应该注意哪些要点呢&#xff1f;现把个人的一些学习经验总结如下&#xff1a; 要点一、piexl 1px 2dp dp dpr dpi ppi 要点二、viewport io…

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…

Mysql 开启远程连接

在日常的数据库的使用过程&#xff0c;往往会因为连接权限的问题搞得我们焦头烂额&#xff0c;今天我把我们在数据库连接上的几个误区简单做个记录。内容如下&#xff1a; 误区一&#xff1a;MYSQL密码和数据库密码的区别 mysql密码是我们在安装mysql服务是设置的密码&#xf…

基于jsp+servlet完成的用户注册

思考 &#xff1a; 需要创建实体类吗? 需要创建表吗 |----User 存在、不需要创建了&#xff01;表同理、也不需要了 1.设计dao接口 package cn.javabs.usermanager.dao;import cn.javabs.usermanager.entity.User;/*** 用户的dao接口的设计* author Mryang**/ public interfa…

vue resource then

https://www.cnblogs.com/chenhuichao/p/8308993.html

云开发创建云函数

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

Java8新特性——函数式接口

目录 一、介绍 二、示例 &#xff08;一&#xff09;Consumer 源码解析 测试示例 &#xff08;二&#xff09;Comparator &#xff08;三&#xff09;Predicate 三、应用 四、总结 一、介绍 FunctionalInterface是一种信息注解类型&#xff0c;用于指明接口类型声明…

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

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

JavaSE之Java基础(1)

1、为什么重写equals还要重写hashcode 首先equals与hashcode间的关系是这样的&#xff1a; 1、如果两个对象相同&#xff08;即用equals比较返回true&#xff09;&#xff0c;那么它们的hashCode值一定要相同&#xff1b; 2、如果两个对象的hashCode相同&#xff0c;它们并不一…

bootstarp table

https://www.cnblogs.com/laowangc/p/8875526.html