[51Nod 1773] A国的贸易

题目描述

A国是一个神奇的国家。

这个国家有 2n 个城市,每个城市都有一个独一无二的编号 ,编号范围为0~2n-1。

A国的神奇体现在,他们有着神奇的贸易规则。

当两个城市u,v的编号满足calc(u,v)=1的时候,这两个城市才可以进行贸易(即有一条边相连)。

而calc(u,v)定义为u,v按位异或的结果的二进制表示中数字1的个数。

ex:calc(1,2)=2 ——> 01 xor 10 = 11

calc(100,101)=1 ——> 0110,0100 xor 0110,0101 = 1

calc(233,233)=0 ——> 1110,1001 xor 1110,1001 = 0

每个城市开始时都有不同的货物存储量。

而贸易的规则是:

每过一天,可以交易的城市之间就会交易一次。

在每次交易中,当前城市u中的每个货物都将使所有与当前城市u有贸易关系的城市货物量 +1 。

请问 t 天后,每个城市会有多少货物。

答案可能会很大,所以请对1e9+7取模。

试题分析

多项式乘法一大用处就是利用在快速转移。

只需要像矩阵那样把一维数组的转移关系写出来。

那么对于本题,构造数组B,使得\(B[0]=1,B[2^x]=1\),其中\(B[0]=1\)是自己还可以保留。

然后进行异或卷积即可。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<algorithm> using namespace std;
#define LL long long inline LL read(){
LL x=0,f=1; char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
for(;isdigit(c);c=getchar()) x=x*10+c-'0';
return x*f;
}
const LL MAXN = (1LL<<22)+11;
const LL INF = 2147483600;
const LL Mod = 1e9+7;
const LL inv2 = 500000004LL; LL N,T; LL a[MAXN+1],b[MAXN+1];
LL lim; inline void FWT(LL *A,LL type){
//for(LL i=0;i<lim;i++) if(rev[i]>i) swap(A[i],A[rev[i]]);
for(LL mid=1;mid<lim;mid<<=1){
for(LL R=(mid<<1),j=0;j<lim;j+=R){
for(LL k=0;k<mid;k++){
LL x=A[k+j] , y=A[k+j+mid];
if(type==1) A[k+j]=(x+y)%Mod , A[k+j+mid]=(x-y+Mod)%Mod;
else A[k+j]=1LL*(x+y)*inv2%Mod , A[k+j+mid]=1LL*(x-y+Mod)%Mod*inv2%Mod;
}
}
}
} int main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
N=read(),T=read(); b[0]=1;
for(LL i=1;i<(1<<N);i<<=1) b[i]=1;
for(LL i=0;i<(1<<N);i++) a[i]=read();
lim=(1<<N);N=(1<<N);
FWT(a,1); FWT(b,1); for(;T;T>>=1){
for(LL i=0;i<lim;i++){
if(T&1) a[i]=1LL*a[i]*b[i]%Mod;
b[i]=1LL*b[i]*b[i]%Mod;
}
} FWT(a,-1);
for(LL i=0;i<N;i++) printf("%lld ",a[i]);
return 0;
}

[51Nod 1773] A国的贸易的更多相关文章

  1. 【51nod】1773 A国的贸易

    题解 FWT板子题 可以发现 \(dp[i][u] = \sum_{i = 0}^{N - 1} dp[i - 1][u xor (2^i)] + dp[i - 1][u]\) 然后如果把异或提出来可 ...

  2. 【51Nod1773】A国的贸易 解题报告

    [51Nod1773]A国的贸易 Description 给出一个长度为 \(2^n\) 的序列,编号从\(0\)开始.每次操作后,如果 \(i\) 与 \(j\) 的二进制表示只差一位则第 \(i\ ...

  3. 51NOD 1773:A国的贸易——题解

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1773 参考1:FWT讲解 https://www.cnblogs.com ...

  4. 51nod1773 A国的贸易

    基准时间限制:2 秒 空间限制:524288 KB 分值: 40  A国是一个神奇的国家. 这个国家有 2n 个城市,每个城市都有一个独一无二的编号 ,编号范围为0~2n-1. A国的神奇体现在,他们 ...

  5. 51Nod1773 A国的贸易 多项式 FWT

    原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1773.html 题目传送门 - 51Nod1773 题意 给定一个长度为 $2^n$ 的序列,第 $ ...

  6. 【51Nod1773】A国的贸易 FWT+快速幂

    题目描述 给出一个长度为 $2^n$ 的序列,编号从0开始.每次操作后,如果 $i$ 与 $j$ 的二进制表示只差一位则第 $i$ 个数会加上操作前的第 $j$ 个数.求 $t$ 次操作后序列中的每个 ...

  7. NOIP2009最优贸易[spfa变形|tarjan 缩点 DP]

    题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分 为双向通行的道路 ...

  8. 【NOIP2009 T3】 最佳贸易 (双向SPFA)

    C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的道 ...

  9. [NOIP2009] 提高组 洛谷P1073 最优贸易

    题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分 为双向通行的道路 ...

随机推荐

  1. 技术分享:如何在PowerShell脚本中嵌入EXE文件

    技术分享:如何在PowerShell脚本中嵌入EXE文件 我在尝试解决一个问题,即在客户端攻击中只使用纯 PowerShell 脚本作为攻击负荷.使用 PowerShell 运行恶意代码具有很多优点, ...

  2. solr4.10.3部署到tomcat——(十)

    0. 准备环境:

  3. go 切片

    切片定义 切片是基于数组类型做的一层封装.它非常灵活,可以自动扩容. var a []int //定义一个int类型的空切片 切片初始化, a[start:end]创建一个包括从start到end-1 ...

  4. mysql -> 事务&事务锁_09

    事务的特性 redo undo 锁的隔离级别

  5. ifdef等宏的妙用

    条件编译 一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是"条件编译". 条件编译命令最常见 ...

  6. MongoDB的安装与使用

    MongoDB是一款NoSql数据库.NoSql数据库叫非关系型数据库,NoSql的全名Not only sql.是为了解决高并发.高可用.高可扩展,以及大数据存储等一系列问题而产生的数据库解决方案. ...

  7. Fiddler 4 抓包(APP HTTPS )

    一.手机连接Fiddler 1.配置fiddler 1.安装fiddler,基本下一步下一步即可: 2.打开fiddler,点击顶部栏Tools——>Options 3.在HTTPS页签勾选“D ...

  8. python_接口自动化测试框架

    本文总结分享介绍接口测试框架开发,环境使用python3+selenium3+unittest+ddt+requests测试框架及ddt数据驱动,采用Excel管理测试用例等集成测试数据功能,以及使用 ...

  9. JS Ajax异步请求发送列表数据后面多了[]

    还在苦逼的写代码,这里就不详细了,直接抛出问题: 如图所示: 前端ajax请求向后端发送数据的时候,给key添加了[]出现很多找不到原因, 后面在说 解决方法: 暂时先这样记录一下,下次方便查找,好了 ...

  10. OA项目Ioc DI(二)

    依赖注入:属性和构造函数的注入 一个简单的Demo: IUserInfoDal接口: public interface IUserInfoDal { void Show(); string Name ...