[BZOJ 3823]定情信物
题面
题解
这题主要考高中物理和数学。
首先定义 \(f[i][j]\) 表示 \(i\) 维超立方体中第 \(j\) 维元素的数量,根据实际意义,我们可以推出递推式: \(f[i][j]=2\cdot f[i-1][j]+f[i-1][j-1]\) 。
\(i\) 维超立方体是由 \(i\!-\!1\) 维超立方体平移得来的,那么第 \(j\) 维元素来源为原来的第 \(j\) 维元素并复制了一份,加上原来的第 \(j\!-\!1\) 维元素通过平移而新构成了一部分。——Ezio
然后我们考虑其组合意义,发现 \(f[i][j]\) 表示把 \(i\) 个元素分为 \(j\) 份,每份第一个元素贡献为 \(1\) ,其它元素贡献为 \(2\) 。那么我们就可以定义 \(g[i][j]\) 表示把 \(i\) 个元素分为 \(j\) 份,每个元素贡献都为 \(2\) ,也就是说 \(g[i][j]=2^i\cdot C_i^j\) ,并且有 \(g[i][j]=2^j\cdot f[i][j]\) ,那么 \(f[i][j]=2^{i-j}\cdot C_i^j\) ,然后就能直接算了,注意要用 \(\text{Lucas}\) 。
代码
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
const int maxn=1e7+3;
int n,MOD;
int bin[maxn];
int Fac[maxn];
int Inv[maxn];
inline int Pow(int x,int k){
int ans=1;
for(;k;x=x*1ll*x%MOD,k>>=1)
if(k&1)ans=ans*1ll*x%MOD;
return ans;
}
inline int C(int n,int m){return Fac[n]*1ll*Inv[m]%MOD*Inv[n-m]%MOD;}
inline int Lucas(int n,int m){
if(n<MOD && m<MOD)
return n<m ? 0 : C(n,m);
const int nn=n%MOD,mm=m%MOD;
return nn<mm ? 0 : C(nn,mm)*1ll*Lucas(n/MOD,m/MOD)%MOD;
}
int main(){
scanf("%d%d",&n,&MOD);
int M=std::min(MOD-1,n);
for(int i=Fac[0]=1;i<=M;++i)
Fac[i]=Fac[i-1]*1ll*i%MOD;
Inv[M]=Pow(Fac[M],MOD-2);
for(int i=M-1;~i;--i)
Inv[i]=Inv[i+1]*1ll*(i+1)%MOD;
for(int i=bin[0]=1;i<=n;++i)
bin[i]=(bin[i-1]<<1)%MOD;
int ans=0;
for(int i=0;i<=n;++i)
ans^=bin[n-i]*1ll*Lucas(n,i)%MOD;
printf("%d\n",ans);
return 0;
}
[BZOJ 3823]定情信物的更多相关文章
- bzoj 3823: 定情信物 线性筛逆元
3823: 定情信物 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 108 Solved: 2[Submit][Status] Descriptio ...
- 定情信物(bzoj 3823)
Description 都说程序员找不到妹子,可是无人知晓,三生石上竟然还刻着属于小 E 的一笔. 那一天,小 E 穷尽毕生的积蓄,赠与了妹子一个非同寻常的定情信物.那是一个小 小的正方体,但透过它, ...
- BZOJ3823 : 定情信物
n维超立方体有$2^{n-i}C_n^i$个i维元素,于是$O(n)$预处理出1到n的逆元,再$O(n)$计算即可. 注意Trick:P可能小于n,所以要将数字表示成$a\times P^b$的形式. ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 洛谷 P2111 考场奇遇
P2111 考场奇遇 题目背景 本市的某神校里有一个学霸,他的名字叫小明(为了保护主人公的隐私,他的名字都用“小明”代替).在这次的期中考试中,小明同学走桃花运,在考场上认识了一位女生,她的名字叫小红 ...
- 深入理解分布式系统的2PC和3PC
协调者 在分布式系统中,每一个机器节点虽然都能明确的知道自己执行的事务是成功还是失败,但是却无法知道其他分布式节点的事务执行情况.因此,当一个事务要跨越多个分布式节点的时候(比如,淘宝下单流程,下单系 ...
- VB调用存储过程 - CreateParameter 方法
这次又转为VB6了....... (┬_┬) ---------------------------------------------------------------------------- ...
- Servlet基本_Filter
1.概念・サーブレットフィルタとは.サーブレットやJSPの「共通の前後処理」を記述するための仕組みです.・フィルタはサーブレットやJSPの前に位置し.実行前と後に.リクエスト.レスポンスに対して任意の ...
- NO.008-2018.02.13《折桂令·春情》元代:徐再思
折桂令·春情_古诗文网 折桂令·春情 元代:徐再思 平生不会相思,才会相思,便害相思.生下来以后还不会相思,才刚刚懂了什么是相思,却深受着相思之苦. 身似浮云,心如飞絮,气若游丝.身像飘浮的云,心 ...
随机推荐
- net 配置文件处理视频
1. 视频 <staticContent> <mimeMap fileExtension=".mp4" mimeType="video/mp4 ...
- 二分查找 BestCoder Round #42 1002 Gunner II
题目传送门 /* 题意:查询x的id,每次前排的树倒下 使用lower_bound ()查找高度,f[i]记录第一棵高度为x树的位置,查询后+1(因为有序) */ #include <cstdi ...
- Unity3D中GameObject 详细介绍
通过Hierarchy面板下的Create菜单可以手动地创建一个GameObject,它可以是一个相机,一个灯光,或者一个简单的模型,当我们要在程序里面动态地创建一个相机的时候,可以new一个Game ...
- (转)Unity优化之减少Drawcall
转载:http://www.jianshu.com/p/061e67308e5f Unity GUI(uGUI)使用心得与性能总结 背景和目的 小哈接触Unity3D也有一段时间了,项目组在UI解决方 ...
- Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bhive.session.id%7D_resources
原因:环境变量设置问题 <property> <name>Hive.exec.local.scratchdir</name> <value> ...
- Android虚拟机电池状态设置
问题描述: 安装SDK后使用AVD配合APPIUM进行测试,此时虚拟机的电池状态为0%充电中:部分APP会对手机电池状态有要求,不符合要求时,无法安装或打开. 解决思路: 1.Android系统设置( ...
- 洛谷 P2153 [SDOI2009]晨跑
题目描述 Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他坚持下来的只有晨跑. 现在给出一张学校附近的地图,这张地图中包含N个十字路口和M条街 ...
- (转)搭建Spring4.x.x开发环境
http://blog.csdn.net/yerenyuan_pku/article/details/52831306 先去Spring官网下载Spring4.x.x开发包(本人使用的版本是Sprin ...
- docker之启动创建容器流程
libcontainer的工作流程 execdriver的run方法通过docker daemon提交一份command信息创建了一份可供libcontainer解读的容器配置container,继而 ...
- ionic小白的学习路之安装运行篇
1.什麽是ionic? Ionic 是一款基于Angular.Cordova 的强大的HTML5 移动应用开发框架, 可以快速创建一个跨平台的移动应用.可以快速开发移动App.移动端WEB 页面.微信 ...