过样例了,但是交上去40pts,只有#1#2#3#5对了,其他全wa。
#include<bits/stdc++.h>
using namespace std;
struct matrix{
unsigned long long m[105][105],x,y;
matrix(){x=0;y=0;memset(m,0,sizeof(m));}
inline void init(){memset(m,0,sizeof(m));for(int i=0;i<=x;i++)m[i][i]=9223372036854775807;}
}now,base;
unsigned long long n,k,a[105],b[105];
matrix ti(matrix a,matrix b){
matrix c;c.x=a.x,c.y=b.y;
for(int i=1;i<=a.x;i++){
for(int j=1;j<=b.x;j++){
for(int k=1;k<=a.y;k++){
c.m[i][j]=(c.m[i][j]|(a.m[i][k]&b.m[k][j]));
}
}
}
return c;
}
matrix pow_m(matrix a,int k){
matrix ans;ans.x=ans.y=a.x;ans.init();
while(k){if(k&1){ans=ti(ans,a);}k>>=1;a=ti(a,a);}
return ans;
}
void ou(matrix a){
cout<<a.x<<" "<<a.y<<" "<<k<<endl;
for(int i=1;i<=a.x;i++){
for(int j=1;j<=a.y;j++){
cout<<a.m[i][j]<<" ";
}
cout<<endl;
}
cout<<endl;
}
int main(){
cin>>n>>k;base.x=base.y=now.y=k,now.x=1;
for(int i=0;i<=k-1;i++)cin>>a[i];
for(int i=1;i<=k;i++)cin>>base.m[i][1];
for(int i=1;i<=k;i++)now.m[1][i]=a[k-i];
for(int i=1;i<=k-1;i++)base.m[i][i+1]=9223372036854775807;
if(n<k){cout<<a[n];return 0;}
base=pow_m(base,n-k+1);
now=ti(now,base);
cout<<now.m[1][1];
return 0;
}