BZOJ 3823 定情信物 递推
来源:互联网 发布:rt809f编程器驱动程序 编辑:程序博客网 时间:2024/04/30 18:20
题目大意:定义点为零维元素,线为一维元素,面为二维元素,空间为三维元素,以此类推,求n维立方体中各维元素都有多少
令f[i][j]为i维立方体内j维元素的个数
考虑n维立方体中的i维元素,将n维立方体拓展至n+1维空间时(觉得抽象的可以想象平面扩展成立方体)
原先的i维元素增加了一倍,同时原先的i-1维元素变为了i维元素
故有f[i][j]=f[i-1][j]*2+f[i-1][j-1]
经过一系列的推导(我不会怎么推,我是打表之后斜着找规律的),可以得到f[i][j]=2^(i-j)*C(i,j)
然后就有f[n][i]=f[n][i+1]*2*(i+1)/(n-i) 线性求出逆元 从后往前推即可
Update:尼玛谁这么蛋疼加强了数据- -||| 加强后的数据出现了n>=p的情况(其实这个题本来是n<p的,出题人忘记写在题面上了- -)
对当前的值记录p的次数 乘或除一个数的时候对次数进行加减 异或的时候如果次数不为零则异或0
时间复杂度不对啊- - 不管了能卡过去
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define M 10001000using namespace std;long long inv[M],ans=1;int n,p;struct Long_Long{ long long left; int pow; Long_Long(long long _):left(_),pow(0) {} void operator *= (long long x) { while(x%p==0) x/=p,pow++; left*=x,left%=p; } void operator /= (long long x) { while(x%p==0) x/=p,pow--; left*=inv[x%p],left%=p; }};void Linear_Shaker(){ int i; inv[1]=1; for(i=2;i<=n&&i<p;i++) inv[i]=(p-p/i)*inv[p%i]%p;}int main(){ int i; Long_Long temp=1; cin>>n>>p; Linear_Shaker(); for(i=n-1;~i;i--) { temp*=static_cast<long long>(i+1<<1); temp/=static_cast<long long>(n-i); ans^=temp.pow?0:temp.left; //cout<<(temp.pow?0:temp.left)<<endl; } cout<<ans<<endl;}
0 0
- BZOJ 3823 定情信物 递推
- bzoj 3823: 定情信物
- BZOJ 3823: 定情信物
- 【bzoj3823】【定情信物】【递推】
- 3823: 定情信物【递推】【线性筛逆元】【带推导过程】
- 【逆元】【bzoj 3823】: 定情信物
- [数学 找规律] BZOJ 3823 定情信物
- BZOJ 3823 定情信物【脑推公式/找规律,线性求逆元,坑爹的数论题细节x
- BZOJ 3823 定情信物 线性筛乘法逆元
- 【BZOJ】【P3823】【定情信物】【题解】【线性筛逆元】
- BZOJ3823 定情信物
- [BZOJ3823]定情信物
- 【BZOJ3823】【East!模拟赛_Round5T1】定情信物 推公式+线性筛逆元(推公式法比出题人简)
- bzoj 4318: OSU! 递推
- bzoj 1863 二分+递推
- bzoj 1088(递推)
- bzoj 1801(递推)
- BZOJ 1411 ZJOI2009 硬币游戏 递推
- QQ网页弹窗
- Mac平台学习OpenGL[1]
- LRU与LFU调度算法
- Linux vmstat命令实战详解
- Bower执行报错解决方法 : ENOGIT git is not installed or not in the PATH
- BZOJ 3823 定情信物 递推
- java学习之-final关键作用
- jdbc-odbc桥连接
- 使用Windows提供的FindFirstFile和FindNextFile获取目录下的文件名
- 二叉树的全部遍历实现与应用
- 在xcode中使用openGL一:程序框架搭建
- js原型
- uva 10061 How many zero's and how many digits ?(在不同进制下分解因子)
- js与mvc 数据的交互