0分求调
  • 板块P2106 Sam数
  • 楼主dcy0709
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/8/1 18:32
  • 上次更新2025/8/2 08:47:44
查看原帖
0分求调
570505
dcy0709楼主2025/8/1 18:32

输出8位数

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<queue>
#include<cmath>
#include<set>
#include<map>
using namespace std;
#define int long long
int a[11][11]={{0,0,0,0,0,0,0,0,0,0,0},{0,1,1,1,0,0,0,0,0,0,0},{0,1,1,1,1,0,0,0,0,0,0},{0,1,1,1,1,1,0,0,0,0,0},{0,0,1,1,1,1,1,0,0,0,0},{0,0,0,1,1,1,1,1,0,0,0},{0,0,0,0,1,1,1,1,1,0,0},{0,0,0,0,0,1,1,1,1,1,0},{0,0,0,0,0,0,1,1,1,1,1},{0,0,0,0,0,0,0,1,1,1,1},{0,0,0,0,0,0,0,1,1,1}};
	int b[11][11],c[11][11];
	int h[1][10]={0,1,1,1,1,1,1,1,1,1};
	int hh[1][10];
const int mod = 1e9+7;
//int dfs(int pos,int x,int flag1,int flag2){
//	if(pos==i){
//		return 1;
//	}
//	if(!flag1&&!flag2&&dp[pos][x]!=-1){
//		return dp[pos][x];
//	}
//	int mx=9;
//	if(flag2){
//		mx=a[pos+1];
//	}
//	int ans=0;
//	for(int i=0;i<=mx;i++){
//		if(abs(i-x)<=2||flag1)
//		ans+=dfs(pos+1,i,(i==0)&flag1,flag2&(i==a[pos+1]));
//	}
//	if(flag1||flag2){
//		return ans;
//	}
//	else{
//		return dp[pos][x]=ans;
//	}
//}
signed main(){
		int k;
		cin>>k;
	while(k){
		if(k%2){
		for(int i=1;i<=10;i++){
			for(int j=1;j<=10;j++){
				for(int kk=1;kk<=10;kk++){
					b[i][j]=(b[i][j]+a[i][kk]*a[kk][j])%mod;
				}
			}
		}
	}
	k/=2;
	for(int i=1;i<=10;i++){
		for(int j=1;j<=10;j++){
			for(int kk=1;kk<=10;kk++){
				c[i][j]=(c[i][j]+a[i][kk]*a[kk][j])%mod;
			}
		}
	}
	for(int i=1;i<=10;i++){
		for(int j=1;j<=10;j++){
			a[i][j]=c[i][j];
		}
	}
	memset(c,0,sizeof(c));
	}
	
	int ans=0;
	for(int i=1;i<=10;i++){
		for(int kk=1;kk<=10;kk++){
			hh[1][i]=(b[kk][i]*h[1][kk]+hh[1][i])%mod;
		}
		ans+=hh[1][i];
		ans%=mod;
	}
	cout<<ans;
    return 0;
}
2025/8/1 18:32
加载中...