51nod1773 A国的贸易
而calc(u,v)定义为u,v按位异或的结果的二进制表示中数字1的个数。
每过一天,可以交易的城市之间就会交易一次。
请问 t 天后,每个城市会有多少货物。
答案可能会很大,所以请对1e9+7取模。
第一行两个正整数 n , t,意义如题。
第二行 2^n 个非负整数,第 i 个数表示编号为 i-1 的城市的初始货物存储量。
n<=20 t<=10^9
输出一行 2^n 个非负整数。
第 i 个数表示过了 t 天后,编号为 i-1 的城市上的货物数量对 1e9+7 取模的结果。
样例1:
3 2
1 2 3 4 5 6 7 8
样例2:
1 1
0 1
样例1:
58 62 66 70 74 78 82 86
样例2:
1 1
动态规划 FWT
根据题意一天到下一天的转移有两种:
1、从f[x]转移到f[x](累加自身)
2、从f[x]转移到f[x Xor 2^i]
转化一下视角,从上一天到这天的转移有两种:
1、从f[x Xor 2^0]到f[x]
2、从f[x Xor 2^i]到f[x]
显然,我们构造一个数组B,使得B只有0和2的幂次位为1,其他位为0,和原数组做异或卷积就能得到一次转移的结果。
加个快速幂就可以了。
需要输出优化。
博主不知道是有多困(chun),才能做到FWT的时候只变换原数组不变换B数组就直接乘,还如同星际选手一般地反复在其他地方找bug……
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
using namespace std;
const int mod=1e9+;
const int inv2=;
const int mxn=;
int read(){
int x=,f=;char ch=getchar();
while(ch<'' || ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>='' && ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
void write(int x){
if(x>)write(x/);
putchar(''+x%);
return;
}
int N,len;
int a[mxn],b[mxn];
void FWT(int *a){
for(int i=;i<N;i<<=){
int p=i<<;
for(int j=;j<N;j+=p){
for(int k=;k<i;k++){
int x=a[j+k],y=a[j+k+i];
a[j+k]=(x+y);if(a[j+k]>=mod)a[j+k]-=mod;
a[j+k+i]=(x-y);if(a[j+k+i]<)a[j+k+i]+=mod;
}
}
}
return;
}
void UTF(int *a){
for(int i=;i<N;i<<=){
int p=i<<;
for(int j=;j<N;j+=p){
for(int k=;k<i;k++){
int x=a[j+k],y=a[j+k+i];
a[j+k]=(x+y)*(LL)inv2%mod;
a[j+k+i]=(x-y)*(LL)inv2%mod;
}
}
}
return;
}
int ksm(int a,int k){
int res=;
while(k){
if(k&)res=(LL)res*a%mod;
a=(LL)a*a%mod;
k>>=;
}
return res;
}
int n,m,T;
int main(){
int i,j;
n=read();T=read();
m=<<n;
for(N=,len=;N<=m;N<<=)len++;
for(i=;i<m;i++)a[i]=read();
for(i=;i<m;i++){
if(i-(i&-i)==)b[i]=;
}
FWT(a);FWT(b);
for(i=;i<N;i++)a[i]=(LL)a[i]*ksm(b[i],T)%mod;
UTF(a);
for(i=;i<m;i++){
// printf("%d ",(a[i]+mod)%mod);
write((a[i]+mod)%mod);
putchar(' ');
}
return ;
}
而calc(u,v)定义为u,v按位异或的结果的二进制表示中数字1的个数。
每过一天,可以交易的城市之间就会交易一次。
请问 t 天后,每个城市会有多少货物。
答案可能会很大,所以请对1e9+7取模。
第一行两个正整数 n , t,意义如题。
第二行 2^n 个非负整数,第 i 个数表示编号为 i-1 的城市的初始货物存储量。
n<=20 t<=10^9
输出一行 2^n 个非负整数。
第 i 个数表示过了 t 天后,编号为 i-1 的城市上的货物数量对 1e9+7 取模的结果。
样例1:
3 2
1 2 3 4 5 6 7 8
样例2:
1 1
0 1
样例1:
58 62 66 70 74 78 82 86
样例2:
1 1
51nod1773 A国的贸易的更多相关文章
- 51Nod1773 A国的贸易 多项式 FWT
原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1773.html 题目传送门 - 51Nod1773 题意 给定一个长度为 $2^n$ 的序列,第 $ ...
- 【51Nod1773】A国的贸易 解题报告
[51Nod1773]A国的贸易 Description 给出一个长度为 \(2^n\) 的序列,编号从\(0\)开始.每次操作后,如果 \(i\) 与 \(j\) 的二进制表示只差一位则第 \(i\ ...
- [51Nod 1773] A国的贸易
[51Nod 1773] A国的贸易 题目描述 A国是一个神奇的国家. 这个国家有 2n 个城市,每个城市都有一个独一无二的编号 ,编号范围为0~2n-1. A国的神奇体现在,他们有着神奇的贸易规则. ...
- 【51Nod1773】A国的贸易 FWT+快速幂
题目描述 给出一个长度为 $2^n$ 的序列,编号从0开始.每次操作后,如果 $i$ 与 $j$ 的二进制表示只差一位则第 $i$ 个数会加上操作前的第 $j$ 个数.求 $t$ 次操作后序列中的每个 ...
- 【51nod】1773 A国的贸易
题解 FWT板子题 可以发现 \(dp[i][u] = \sum_{i = 0}^{N - 1} dp[i - 1][u xor (2^i)] + dp[i - 1][u]\) 然后如果把异或提出来可 ...
- 51NOD 1773:A国的贸易——题解
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1773 参考1:FWT讲解 https://www.cnblogs.com ...
- NOIP2009最优贸易[spfa变形|tarjan 缩点 DP]
题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分 为双向通行的道路 ...
- 【NOIP2009 T3】 最佳贸易 (双向SPFA)
C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的道 ...
- [NOIP2009] 提高组 洛谷P1073 最优贸易
题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分 为双向通行的道路 ...
随机推荐
- SSL 重点SSL会话步骤
SSL.TLS协议 在wiki百科查看下,两者的区别 实现SSL协议的软件 OpenSSL开源软件 SSL会话步骤 1:客户端向服务端索取CA证书,然后验证证书 2:客户端与服务端约定一个通信中使 ...
- css声明的优先级
选择器的特殊性 选择器的特殊性由选择器本身的组件确定,特殊性值表述为4个部分,如0,0,0,0,0 一个选择器的具体特殊性如下确定 1.对于选择器给定的ID属性值,加0,1,0,0 2.对于选择器中给 ...
- Mac & how to uninstall LANDesk
Mac & how to uninstall LANDesk http://eddiejackson.net/wp/?p=9036 https://community.ivanti.com/d ...
- inno setup 打包exe程序
inno setup 用于打包生成安装程序, 是通过的一个脚本 可以将 exe 执行文件以安装的形式,解压,添加依赖,创建快捷方式. 例如,我们写了个winform,我们怎么通过安装的形式,给客户的机 ...
- luogu 1344 追查坏牛奶(最小割)
第一问求最小割. 第二问求割边最小的最小割. 我们直接求出第二问就可以求出第一问了. 对于求割边最小,如果我们可以把每条边都附加一个1的权值,那么求最小割是不是会优先选择1最少的边呢. 但是如果直接把 ...
- 关于setInterval()定时
最近项目中,遇到个需求就是获取停车场剩余车位数量,想是通过ajax定时抓取接口数据来实现(本想通过SignalR),但是项目本身直供少数人使用,感觉定时ajax可以满足 下面上代码 var handl ...
- [十三]SpringBoot 之 过滤器(Filter)和监听器(Listener)
过滤器(Filter)和 监听器(Listener)的注册方法和 Servlet 一样,不清楚的可以查看下上一篇文章 代码示例 package me.shijunjie.filter; import ...
- 洛谷 P3258 [JLOI2014]松鼠的新家
树剖,裸题,鉴定完毕. 我是题面 读完题,恩,树剖,裸题,没劲. 处理很简单,既然每到一个房间吃一块糖,那么就在每条路径上的每个房间放一颗糖,但是每条路径的终点也就是下一条路径的起点,在这里只能加一次 ...
- castle activerecord 学习过程出现的问题
优点: 1.CRUD:代码简洁 2.不用配置map 3.自带事务方便 4.自带IOC 5.自带 数据有效性验证 缺点: 1.自增长(Oracle 一直提示序号不存在,有空继续尝试) 2.多条件,直接用 ...
- BMP格式图像读取与存储
全局变量: 1 #include "stdafx.h" #include <windows.h> /*BMP位图数据是4字节对齐*/ #define WIDTHBYTE ...