AC样例#1测试点#1#2#3#4#5,WA样例#2,WHY
查看原帖
AC样例#1测试点#1#2#3#4#5,WA样例#2,WHY
935837
caichengyia楼主2025/6/28 15:50
#include<bits/stdc++.h>
using namespace std;
long long mod=1000000007,n,m,b[101],t,c[101];
struct matrix{
	long long n=0,m=0,a[101][101]={};
	matrix operator*(matrix x){
		matrix ret;
		if(m!=x.n){
			cout<<"error";
			return ret;
		}
		ret.n=n;
		ret.m=x.m;
		for(int i=1;i<=n;i++)for(int k=1;k<=m;k++)for(int j=1;j<=x.m;j++)ret.a[i][j]=(ret.a[i][j]+a[i][k]*x.a[k][j])%mod;
		return ret;
	}
}a;
matrix ksm(matrix a,long long b){
	matrix k;
	if(a.n!=a.m){
		cout<<"error";
		return k;
	}
	if(b==1)return a;
	k=ksm(a,b>>1);
	k=k*k;
	if(b&1)k=k*a;
	return k;
}
signed main(){
	a.n=a.m=100;
	for(int i=1;i<100;i++)a.a[i+1][i]=1;
	cin>>t>>n;
	for(int i=1;i<=n;i++)cin>>c[i];
	cin>>m;
	for(int i=1;i<=m;i++)cin>>b[i];
	sort(c+1,c+n+1);
	sort(b+1,b+m+1);
	for(int i=1,j=1;i<=n&&j<=m;){
		if(c[i]==b[j]){
			a.a[101-c[i]][100]=1;
			i++;
			j++;
		}
		else if(c[i]<b[j])i++;
		else j++;
	}
	a=ksm(a,t);
	cout<<a.a[100][100];
}
2025/6/28 15:50
加载中...