40pts求调
查看原帖
40pts求调
580202
Siegerkranz_2735楼主2024/5/16 17:32

过样例了,但是交上去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;
}
2024/5/16 17:32
加载中...