关注
//第二题
#include<iostream>
#include<algorithm>
#include<vector>
#include<string.h>
#define M 1000000007
using namespace std;
long long pow(long long k){
if(k==0) return 1;
if(k==1) return 3;
long long t=pow(k/2);
t=t*t;
if(k%2==1) t*=3;
return t%M;
}
long long a[2][2]={0,3,1,2};
void getAns(long long k, long long b[][2]){
if(k==1) {
for(int i=0;i<2;++i)
for(int j=0;j<2;++j)
b[i][j]=a[i][j];
return ;
}
long long t[2][2];
getAns(k/2,t);
long long tt[2][2]={0};
for(int i=0;i<2;++i)
for(int j=0;j<2;++j)
for(int k=0;k<2;++k)
tt[i][j]+=t[i][k]*t[k][j],tt[i][j]%=M;
if(k%2==1){
long long ttt[2][2];
for(int i=0;i<2;++i)
for(int j=0;j<2;++j)
ttt[i][j]=tt[i][j],tt[i][j]=0;
for(int i=0;i<2;++i)
for(int j=0;j<2;++j)
for(int k=0;k<2;++k)
tt[i][j]+=ttt[i][k]*a[k][j],tt[i][j]%=M;
}
for(int i=0;i<2;++i)
for(int j=0;j<2;++j)
b[i][j]=tt[i][j];
return ;
}
long long getTot(long long k,int p){
if(k==0){
if(p==0) return 0;
return 1;
}
if(k==1) {
if(p==0) return 3;
else return 2;
}
long long b[2][2];
getAns(k-1,b);
if(p==0) {
long long tot=b[0][0]*3+b[0][1]*2;
return tot%=M;
} else {
long long tot=b[1][0]*3+b[1][1]*2;
return tot%=M;
}
}
int check(int x,int y){
if(x==y) return 0;
return 1;
}
long long t,n,m;
long long f[1005][5];
long long w[1005];
int c[1005];
int main(){
cin>>t;
while(t-- > 0){
cin>>n>>m;
memset(f,sizeof(f),0);
memset(w,sizeof(w),0);
memset(c,sizeof(c),0);
if(m==0){
cout<<(4*pow(n-1))%M<<endl;
continue;
}
for(int i=0;i<m;++i){
cin>>w[i];
}
for(int i=0;i<m;++i){
cin>>c[i];
}
f[0][c[0]]=pow(w[0]-1);
for(int i=1;i<m;++i){
f[i][c[i]]=f[i-1][c[i-1]]*getTot(w[i]-w[i-1]-1,check(c[i],c[i-1]));
f[i][c[i]]%=M;
}
if(w[m-1]==n){
cout<<f[m-1][c[m-1]]<<endl;
} else{
long long ans = f[m-1][c[m-1]]*pow(n-w[m-1]);
ans%=M;
cout<<ans<<endl;
}
}
return 0;
}
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享

点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 找工作,行业重要还是岗位重要? #
11859次浏览 217人参与
# 来聊聊机械薪资天花板是哪家 #
110046次浏览 720人参与
# 机械人怎么评价今年的华为 #
188311次浏览 1502人参与
# 硬件兄弟们 甩出你的华为奖状 #
93048次浏览 670人参与
# 机械人与华为的爱恨情仇 #
103282次浏览 921人参与
# 24届硬件人与华为的爱恨情仇 #
117886次浏览 961人参与
# 机械专业只有考研才有出路吗 #
93105次浏览 850人参与
# 你最满意的offer薪资是哪家公司? #
15718次浏览 119人参与
# 金融财会交流会 #
98752次浏览 361人参与
# 国企还是互联网,你怎么选? #
123796次浏览 960人参与
# 盲审过后你想做什么? #
13513次浏览 119人参与
# 五一之后,实习真的很难找吗? #
49786次浏览 353人参与
# 外包能不能当跳板? #
22747次浏览 192人参与
# 机械人还在等华为开奖吗? #
211942次浏览 1088人参与
# 设计人如何选offer #
99056次浏览 694人参与
# 国企/银行/研究所公司爆料 #
121490次浏览 742人参与
# 潍柴工作体验 #
17290次浏览 17人参与
# 摸鱼被leader发现了怎么办 #
41359次浏览 316人参与
# Offer比较,求稳定还是求发展 #
39383次浏览 226人参与
# 运营面经 #
98744次浏览 1200人参与