【51Nod1773】A国的贸易

Description

给出一个长度为 \(2^n\) 的序列,编号从\(0\)开始。每次操作后,如果 \(i\) 与 \(j\) 的二进制表示只差一位则第 \(i\) 个数会加上操作前的第 \(j\) 个数。求 \(t\) 次操作后序列中的每个数是多少。

Input

第一行两个正整数 \(n\) ,\(t\),意义如题。
第二行 \(2^n\) 个非负整数,第 \(i\) 个数表示编号为 \(i-1\) 的城市的初始货物存储量。
\(n<=20 \ t<=10^9\)

Output

输出一行 \(2^n\) 个非负整数。
第 \(i\) 个数表示过了 \(t\) 天后,编号为 \(i-1\) 的城市上的货物数量对 \(1e9+7\) 取模的结果。


构造一个多项式\(F\),\(F_i=1\),当\(i\)是\(2\)的正整数幂的时候。

然后答案就是\(D*F^t\),乘法是异或子集和,用\(FWT\)就可以了。

注意到不要写多项式快速幂,子集运算的长度是封闭的,所以化成类似点乘的形式后做快速幂即可,这样复杂度是\(O(n2^n)\)的


Code:

#include <cstdio>
const int N=(1<<20)+10;
const int mod=1e9+7,inv=500000004;
namespace Fast{const int LEN=10000000;char inp[LEN],outp[LEN];int tmp[20];int inpos,outpos;void init(){fread(inp,1,LEN,stdin);inpos=0; outpos=0;}char GetChar(){return inp[inpos++];}int read(){int ret=0; char ch=GetChar();while (ch<'0'||ch>'9') ch=GetChar();while ('0'<=ch&&ch<='9') ret=ret*10+ch-'0',ch=GetChar();return ret;}void PutChar(char ch){outp[outpos++]=ch;}void print(int x){int pos=0;if (!x) tmp[++pos]=0;elsewhile (x) tmp[++pos]=x%10,x/=10;for (int i=pos;i>=1;--i) PutChar(tmp[i]+'0');}void Print(){fwrite(outp,1,outpos,stdout);}
}
#define mul(a,b) (1ll*(a)*(b)%mod)
#define add(a,b) ((a+b)%mod)
int n,len,t,T[N],D[N];
void xorfwt(int *a,int typ)
{for(int le=1;le<len;le<<=1)for(int p=0;p<len;p+=le<<1)for(int i=p;i<p+le;i++){int tx=a[i],ty=a[i+le];a[i]=add(tx,ty),a[i+le]=add(tx,mod-ty);if(!typ) a[i]=mul(a[i],inv),a[i+le]=mul(a[i+le],inv);}
}
int qp(int d,int k){int f=1;while(k){if(k&1)f=mul(f,d);d=mul(d,d),k>>=1;}return f;}
int main()
{Fast::init();n=Fast::read(),t=Fast::read(),len=1<<n;for(int i=0;i<len;i++) T[i]=Fast::read();D[0]=1;for(int i=0;i<n;i++) D[1<<i]=1;xorfwt(T,1),xorfwt(D,1);for(int i=0;i<len;i++) T[i]=mul(T[i],qp(D[i],t));xorfwt(T,0);for(int i=0;i<len;i++) Fast::print(T[i]),Fast::PutChar(' ');Fast::Print();return 0;
}

2018.12.18

转载于:https://www.cnblogs.com/butterflydew/p/10136735.html

【51Nod1773】A国的贸易 解题报告相关推荐

  1. [51nod1773]A国的贸易

    题目链接: 51nod1773 首先可以很简单的写出每一天的DP转移式: \(f[i][x]=\sum f[i-1][x\ xor\ k](k=0\ or\ k=2^j,0\le j<n)\) ...

  2. [解题报告] CSDN竞赛第六期

    CSDN编程竞赛报名地址:https://edu.csdn.net/contest/detail/16 1. 严查枪火 题目 X国最近开始严管枪火. 像是"ak", "m ...

  3. uscao 线段树成段更新操作及Lazy思想(POJ3468解题报告)

    线段树成段更新操作及Lazy思想(POJ3468解题报告) 标签: treequerybuildn2cstruct 2011-11-03 20:37 5756人阅读 评论(0) 收藏 举报  分类: ...

  4. 解题报告(十八)数论题目泛做(Codeforces 难度:2000 ~ 3000 + )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  5. 【解题报告系列】超高质量题单 + 题解(ACM / OI)超高质量题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我新写的超高质量的题解和代码,题目难度不 ...

  6. 解题报告(三)多项式求值与插值(拉格朗日插值)(ACM / OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  7. 解题报告(十三)中国剩余定理(ACM / OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  8. 解题报告(四)生成函数(ACM/ OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  9. 解题报告(八) prufer 序列与 Cayley 公式(ACM / OI)超高质量题解

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

最新文章

  1. windows上通过cmake-gui生成pytorch工程
  2. 全球首个开源图像识别系统上线!
  3. 超越快手腾讯!度小满NLP模型登顶CLUE榜首
  4. 复习计算机网络基础 day3---什么是计算机网络:
  5. Python 可视化库
  6. 春节回来了,你收获了什么?
  7. leetcode 594. Longest Harmonious Subsequence | 594. 最长和谐子序列
  8. 边缘计算框架_【北大成果】一种集成多组网协议多边缘计算框架的边缘计算处理平台...
  9. angularjs directive 实例 详解
  10. 神经网络 卷积神经网络_如何愚弄神经网络?
  11. linux 向程序发送信号,Linux下的信号处理
  12. 【BZOJ4542】大数, 莫队
  13. 安卓应用安全指南 翻译完成
  14. 小米、红米手机如何打开开发者模式,如何测试安装App
  15. 圆周率小数点后1千位(附计算圆周率源代码)
  16. Python编程从入门到实践_第七章_用户输入和while循环
  17. 关键对话(如何高效沟通)读书总结
  18. 尼尔·斯蒂芬森 (Neal Stephenson) 谈他的新地球工程气候变化惊悚片并创造了“元宇宙”一词...
  19. 数据分析:企业人力资源管理探索
  20. #Reading Paper# 【序列推荐综述】IJCAI‘19:Sequential Recommender Systems: Challenges, Progress and Prospects

热门文章

  1. python 长时间运行 会停止_如何“停止”和“恢复”长时间运行Python脚本?
  2. mysql慢查询call_慢查询日志 - Azure Database for MySQL | Microsoft Docs
  3. 信号回勾产生的原因_为什么照片放大会有噪点?产生噪点的4个因素,来了解一下...
  4. Language modeling tutorial in torchtext
  5. Python 字符编码 b
  6. 马的走法编程java_马周游问题(Java实现)
  7. 二叉树层次遍历c语言_每日一道 LeetCode (23):二叉树的层次遍历 II
  8. RVC使用指南(六)-排错
  9. Dell PowerEdge R740xd可以做什么?
  10. Java设计模式学习总结(16)——行为型模式之命令模式