[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《折桂令·春情》元代:徐再思
折桂令·春情_古诗文网 折桂令·春情 元代:徐再思 平生不会相思,才会相思,便害相思.生下来以后还不会相思,才刚刚懂了什么是相思,却深受着相思之苦. 身似浮云,心如飞絮,气若游丝.身像飘浮的云,心 ...
随机推荐
- selenium之webdriverAPI接口详解
1. 浏览器操作 driver.maximize_window() #最大化窗口driver.execute_script('window.scrollTo(0,0);') #滚动窗口到最上面driv ...
- _bzoj1911 [Apio2010]特别行动队【斜率优化dp】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1911 裸的斜率优化dp. #include <cstdio> const int ...
- luogu P3371 & P4779 单源最短路径spfa & 最大堆优化Dijkstra算法
P3371 [模板]单源最短路径(弱化版) 题目背景 本题测试数据为随机数据,在考试中可能会出现构造数据让SPFA不通过,如有需要请移步 P4779. 题目描述 如题,给出一个有向图,请输出从某一点出 ...
- eclipse导入php项目
整个工程的都在一个文件夹里面 怎么把它导入到eclipse里面呢:在eclipse里新建一个与要导入的工程同名工程.
- Redis java操作客服端——jedis
1. Jedis 需要把jedis依赖的jar包添加到工程中.Maven工程中需要把jedis的坐标添加到依赖. 推荐添加到服务层.happygo-content-Service工程中. 1.1. 连 ...
- AJPFX关于枚举,泛型详解
枚举类型是JDK5.0的新特征.Sun引进了一个全新的关键字enum来定义一个枚举类.下面就是一个典型枚举类型的定义:public enum Color{RED,BLUE,BLACK,YELLOW,G ...
- Maven项目中War包的打包及依赖方式
两个web项目之间的依赖引用方式.Web项目之间,通过war包的方式进行引用的.例如,有两个项目,puzzle-web和puzzle-web-demo,两个均是web项目,puzzle-web-dem ...
- 3. UITest笔记
1. XCUIApplication *app = [[XCUIApplication alloc] init]; App为查询的入口,当界面发生变化,查询数也会随之更新. 即使是先前存储的XC ...
- windows下常用的一些shell命令
看的视频上都是linux系统的shell命令,和windows区别很多.所以整理了windows常用的一些shell命令. 注意:并不是每个都试验过,使用时还需自己验证下. 学system和os,su ...
- os模块详解2
1.os.getenv('HOME') 读取操作系统环境变量HOME的值. 2.os.environ 返回操作系统所有的环境变量. 3.os.environ.setdefault(‘a’,‘b’) ...