牛客 [NCT058B]清新题
给定 \(n,m\),求有多少对长度为 \(n\) 的序列 \(a,b\) 合法。
两个序列 a,ba,ba,b 合法被定义为 :
\(∀i,ai,bi∈[0,2m).a_1|a_2|\cdots|a_n\geqslant b_1\oplus b_2\oplus \cdots b_n~,~\forall i,a_i,b_i\in [0,2^m)\)
其中 \(|\) 表示按位或,\(\oplus\) 表示按位异或。
输入描述:
两个以空格分隔的正整数 \(n,m.\)
输出描述:
一个非负整数,表示答案对 \(10^9 + 7\) 取模后的值。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=1e6+5,mod=1e9+7;
#define int long long
inline int ksm(int x,int y){
int ans=1;
while(y){
if(y&1)ans=ans*x%mod;
x=x*x%mod; y>>=1;
}
return ans;
}
signed main(){
int n,m;
cin>>n>>m;
int res=0,lst=1;
for(int i=1;i<=m;i++){
int A=ksm(2,n);
A=(A-1+mod)%mod;
int B=ksm(2,n-1);
int op=ksm(2,2*n*(m-i));
res=(res+A*B%mod*lst%mod*op%mod)%mod;
lst=lst*((A*B%mod+B)%mod)%mod;
}
res=(res+lst)%mod;
cout<<res<<endl;
}
不以物喜,不以己悲
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步