【JZOJ6210】【20190612】wsm
题目
定义两个非递减数列的笛卡尔和数列\(C = A \oplus B\) 为\((A_i+B_j)\)排序后的非递减数列
\(W\)组询问,问有多少对可能的数列,满足:
\(|C|=s,|A| = m,|B|=s/m\)且\(A \oplus B = C,C = \{ 0,1,\cdots,s-1 \}\)
$1 \le W \le 500 \ , \ 1 \le s , m \le 10^{12} \ , \ 且 m \ | \ s $
题解
这题不好做的原因在于猜不到第一步,暂时还不会证明,证明的瓶颈在于能否证明对于给定一个合法序列A,它的最小的合法序列B满足\(|B| \le |A|\) ,尝试了以晚上无果。。。。
合法的序列\(A \ B\)的布尔序列的生成方式:
初始时一定都存在\(0\)为\(A , B \ = \ \{ 1 \}\) ,接下来有两种操作:
1.将\(A\)复制若干遍,\(B\)用全\(0\)补到相同长度
2.将\(B\)复制若干边,\(A\)用全\(0\)补到相同长度
1/2开始,交替进行12即可得到所有的合法序列对
讨论12进行的次数之后问题显然对于两维是独立的,变成从1 每次乘以一个非1的数到m的步数
对每个质因子用隔板法统计答案,容斥掉某些位置为1 的情况
时间复杂度:\(O(W\sqrt N log \ s)\)
#include<bits/stdc++.h>
#define mod 998244353
#define ll long long using namespace std; const int N=62;
ll n,m;
int ny[N<<1],fac[N<<1],inv[N<<1],d[N],A[N],B[N],ans; void pre(){
ny[1]=1;for(int i=2;i<=120;++i)ny[i]=1ll*(mod-mod/i)*ny[mod%i]%mod;
for(int i=fac[0]=inv[0]=1;i<=120;++i)
fac[i]=1ll*fac[i-1]*i%mod,
inv[i]=1ll*inv[i-1]*ny[i]%mod;
}
void inc(int&x,int y){x+=y;if(x>=mod)x-=mod;}
void dec(int&x,int y){x-=y;if(x<0)x+=mod;}
int cal(int x,int y){return x<y?0:1ll*fac[x]*inv[y]%mod*inv[x-y]%mod;}
void add(int*a,int x){for(int i=1;i<=60;++i)a[i]=1ll*a[i]*cal(x+i-1,i-1)%mod;} void solve(ll x,int*a){
for(int i=1;i<=60;++i)a[i]=1;
for(int i=2;1ll*i*i<=x;++i)if(x%i==0){
int tot=0;while(!(x%i)&&(x/=i))tot++;
add(a,tot);
}
if(x!=1)add(a,1);
for(int i=1;i<=60;++i)
for(int j=1;j<i;++j)
dec(a[i],1ll*cal(i,j)*a[j]%mod);
} int main(){
freopen("wsm.in","r",stdin);
freopen("wsm.out","w",stdout);
int T;scanf("%d",&T);
pre();
while(T--){
scanf("%lld%lld",&n,&m);
n/=m;if(n==1||m==1){puts("1");continue;}
solve(n,A);
solve(m,B);
ans=0;
for(int i=1;i<=60;++i)inc(ans , (2ll*A[i]*B[i]+1ll*A[i+1]*B[i]+1ll*A[i]*B[i+1]) %mod);
printf("%d\n",ans);
}
return 0;
}
【JZOJ6210】【20190612】wsm的更多相关文章
- 【疯狂造轮子-iOS】JSON转Model系列之二
[疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...
- 【疯狂造轮子-iOS】JSON转Model系列之一
[疯狂造轮子-iOS]JSON转Model系列之一 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 之前一直看别人的源码,虽然对自己提升比较大,但毕竟不是自己写的,很容易遗 ...
- 【原创分享·支付宝支付】HBuilder打包APP调用支付宝客户端支付
前言 最近有点空余时间,所以,就研究了一下APP支付.前面很早就搞完APP的微信支付了,但是由于时间上和应用上的情况,支付宝一直没空去研究.然后等我空了的时候,发现支付宝居然升级了支付逻辑,虽然目前还 ...
- 【AutoMapper官方文档】DTO与Domin Model相互转换(上)
写在前面 AutoMapper目录: [AutoMapper官方文档]DTO与Domin Model相互转换(上) [AutoMapper官方文档]DTO与Domin Model相互转换(中) [Au ...
- 【Win 10 应用开发】应用预启动
所谓预启动,其实你一看那名字就知道是啥意思了,这是直接译,也找不到比这个叫法更简练的词了.在系统资源允许的情况下(比如电池电量充足,有足够的内存空间),系统会把用户常用的应用程序在后台启动,但不会显示 ...
- 【Win 10 应用开发】启动远程设备上的应用
这个功能必须在“红石-1”(build 14393)以上的系统版中才能使用,运行在一台设备上的应用,可以通过URI来启动另一台设备上的应用.激活远程应用需要以下前提: 系统必须是build 14393 ...
- 【开源】分享2011-2015年全国城市历史天气数据库【Sqlite+C#访问程序】
由于个人研究需要,需要采集天气历史数据,前一篇文章:C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子),介绍了基本的采集思路和核心代码,经过1个星期的采集,历史数据库 ...
- 【原创分享·微信支付】C# MVC 微信支付教程系列之现金红包
微信支付教程系列之现金红包 最近最弄这个微信支付的功能,然后扫码.公众号支付,这些都做了,闲着无聊,就看了看微信支付的其他功能,发现还有一个叫“现金红包”的玩意,想 ...
- 【原创分享·微信支付】 C# MVC 微信支付教程系列之扫码支付
微信支付教程系列之扫码支付 今天,我们来一起探讨一下这个微信扫码支付.何为扫码支付呢?这里面,扫的码就是二维码了,就是我们经常扫一扫的那种二维码图片,例如,我们自己添 ...
- 【原创分享·微信支付】 C# MVC 微信支付教程系列之公众号支付
微信支付教程系列之公众号支付 今天,我们接着讲微信支付的系列教程,前面,我们讲了这个微信红包和扫码支付.现在,我们讲讲这个公众号支付.公众号支付的应用环境常见的用户通过公众号,然后再通 ...
随机推荐
- 《JAVA高并发编程详解》-类的加载过程简介
- cas sso 单点登录
一些介绍: https://www.jianshu.com/p/b7de8e4cf217 https://blog.csdn.net/javaloveiphone/article/details/52 ...
- Angular—入门环境,项目创建,导入项目
1.安装 nodejs,npm nodejs 下载地址: https://nodejs.org/en/download/
- GO执行shell命令
Golang执行shell命令主要依靠exec模块 代码为核心逻辑,并非全部 运行命令 cmd1 = exec.Command("ls") if err = cmd1.Run(); ...
- 详解MongoDB中的多表关联查询($lookup) (转)
一. 聚合框架 聚合框架是MongoDB的高级查询语言,它允许我们通过转换和合并多个文档中的数据来生成新的单个文档中不存在的信息. 聚合管道操作主要包含下面几个部分: 命令 功能描述 $projec ...
- 【转】点评cat高可用实时监控系统
CAT总体介绍CAT(Central Application Tracking)是由吴其敏(前大众点评首席架构师,现携程架构负责人)主导设计基于Java开发打造的实时应用监控平台,为大众点评网提供了全 ...
- AbsInt — 确保代码安全的性能/资源分析工具套件
德国AbsInt公司是一家安全苛求软件研发.确认.验证和认证工具链的供应商,能够为客户提供完整的确保代码安全的性能分析工具套件以及软件分析.验证.确认和编译器技术相关咨询服务.AbsI ...
- poj3522Slim Span(暴力+Kruskal)
思路: 最小生成树是瓶颈生成树,瓶颈生成树满足最大边最小. 数据量较小,所以只需要通过Kruskal,将边按权值从小到大排序,枚举最小边求最小生成树,时间复杂度为O( nm(logm) ) #incl ...
- appium+python自动化64-使用Uiautomator2执行driver.keyevent()方法报错解决
前言 未加'automationName': 'Uiautomator2'参数使用Uiautomator可以正常使用driver.keyevent()方法,使用Uiautomator2时driver. ...
- java怎么比较两个实体类的属性值
分享一下比较两个实体类的工具包 package cn.mollie.utils; import java.beans.Introspector; import java.beans.PropertyD ...