【51Nod1773】A国的贸易 解题报告
【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;
        else
            while (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
【51Nod1773】A国的贸易 解题报告的更多相关文章
- 洛谷 P1073 最优贸易 解题报告
		
P1073 最优贸易 题目描述 \(C\)国有\(n\)个大城市和\(m\)条道路,每条道路连接这\(n\)个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这\(m\)条道路中有一部分 ...
 - 51nod1773 A国的贸易
		
基准时间限制:2 秒 空间限制:524288 KB 分值: 40 A国是一个神奇的国家. 这个国家有 2n 个城市,每个城市都有一个独一无二的编号 ,编号范围为0~2n-1. A国的神奇体现在,他们 ...
 - 51Nod1773 A国的贸易 多项式 FWT
		
原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1773.html 题目传送门 - 51Nod1773 题意 给定一个长度为 $2^n$ 的序列,第 $ ...
 - 洛谷  P2317 [HNOI2005]星际贸易 解题报告
		
P2317 [HNOI2005]星际贸易 题目描述 输入输出格式 输入格式: 输出格式: 如果可以找到这样的方案,那么输出文件output.txt中包含两个整数X和Y.X表示贸易额,Y表示净利润并且两 ...
 - 【NOIP2015】提高day2解题报告
		
题目: P1981跳石头 描述 一年一度的“跳石头”比赛又要开始了!这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N ...
 - 【第40套模拟题】【noip2011_mayan】解题报告【map】【数论】【dfs】
		
目录:1.潜伏者 [map] 2.Hankson的趣味题[数论]3.mayan游戏[dfs] 题目: 1. 潜伏者(spy.pas/c/cpp)[问题描述]R 国和S 国正陷入战火之中,双方都互派间谍 ...
 - 【未完成0.0】Noip2012提高组day2 解题报告
		
第一次写一套题的解题报告,感觉会比较长.(更新中Loading....):) 题目: 第一题:同余方程 描述 求关于x的同余方程ax ≡ 1 (mod b)的最小正整数解. 格式 输入格式 输入只有一 ...
 - 2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告
		
2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告 勘误1:第6题第4个 if最后一个条件粗心写错了,答案应为1580. 条件应为abs(a[3]-a[7])!=1,宝宝心理苦啊.!感谢zzh ...
 - CH Round #56 - 国庆节欢乐赛解题报告
		
最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...
 
随机推荐
- ubuntu HackRF One相关环境搭建
			
本文内容.开发板及配件仅限用于学校或科研院所开展科研实验! 淘宝店铺名称:开源SDR实验室 HackRF链接:https://item.taobao.com/item.htm?spm=a1z10.1- ...
 - 笔记:《机器学习训练秘籍》——吴恩达deeplearningai微信公众号推送文章
			
说明 该文为笔者在微信公众号:吴恩达deeplearningai 所推送<机器学习训练秘籍>系列文章的学习笔记,公众号二维码如下,1到15课课程链接点这里 该系列文章主要是吴恩达先生在机器 ...
 - 使用谷歌浏览器调试WEB前端的一些必备调试技巧
			
转载:http://www.techug.com/post/chrome-debug-tips.html Chrome的开发者工具是个很强大的东西,相信程序员们都不会陌生,不过有些小功能可能并不为大众 ...
 - 【欢迎来怼】 Beta发布事后诸葛亮会议
			
队名:欢迎来怼 项目名称:博客园Android端APP 小组成员队长:田继平成员:李圆圆,葛美义,王伟东,姜珊,邵朔,阚博文 ————————————————————————————————————— ...
 - Classifier
			
1.视频:https://morvanzhou.github.io/tutorials/machine-learning/keras/2-2-classifier/ 2.敲了代码,但是运行结果不懂,明 ...
 - linux上传的命令
			
pscp D:\apache-tomcat-8.0.38\webapps\GameDataServer.zip root@112.74.32.215:/usr/local/tools/tomcat/a ...
 - TCP 连接管理
			
实验代码和内容:https://github.com/ZCplayground/Understanding-Unix-Linux-Programming/tree/master/11.socket 明 ...
 - SQL语句中的output用法
			
private void button2_Click(object sender, RoutedEventArgs e) { using (SqlConnection conn = new SqlCo ...
 - 用css 修改 谷歌浏览器自带的 滚动条样式
			
::-webkit-scrollbar { width: 0.5rem;}/* Track */ ::-webkit-scrollbar-track { -webkit-box-shadow: ins ...
 - 【转】python win32api win32gui win32con 简单操作教程(窗口句柄 发送消息 常用方法 键盘输入)
			
作者:https://blog.csdn.net/qq_16234613/article/details/79155632 附:https://www.programcreek.com/python/ ...