P1939 未定义行为
  • 板块学术版
  • 楼主0tAp
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/10/24 21:49
  • 上次更新2024/10/24 23:26:54
查看原帖
P1939 未定义行为
758858
0tAp楼主2024/10/24 21:49
#include<algorithm>
#include<iostream>
#include<string.h>
#include<cstdio>
#include<vector>
#include<queue>
#include<cmath>
#include<map>
#include<set>
using namespace std;
#define int long long
#define repu(i,u) for(int i=(h[u]);i;i=(ne[i]))
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define dwn(i,a,b) for(int i=(a);i>=(b);i--)
#define xx return
const int MOD=1e9+7;

int T;
int a[3],f[3][3];

void mul_k(int a1[3],int f1[3][3])
{
	int C[3];
	memset(C,0,sizeof C);
	rep(j,0,2)
	{
		rep(k,0,2)
		{
			C[j]=(C[j]+a1[k]*f1[k][j])%MOD;
		}	
	}
	memcpy(a,C,sizeof C);
}

void mul_self(int f1[3][3])
{
	int C[3][3];
	memset(C,0,sizeof C);
	rep(i,0,2)rep(j,0,2)rep(k,0,2)
	{
		C[i][j]=(C[i][j]+f1[i][k]*f1[k][j])%MOD;
	}
	memcpy(f,C,sizeof C);
}

void clear()
{
	rep(i,0,2)rep(j,0,2)f[i][j]=0;
	rep(i,0,3)a[i]=0;
	a[0]=1,a[1]=1,a[2]=1;
	f[0][0]=f[0][2]=f[1][0]=f[2][1]=1;
}

void solve()
{
	int n;
	cin>>n;
	if(n<=3)
	{
		cout<<1<<endl;xx;
	}
	n-=3;
	for(;n;n>>=1)
	{
		if(n&1)mul_k(a,f);
		mul_self(f);
	}
	cout<<a[0]%MOD<<endl;
	xx;
}

signed main()
{
	//freopen("P1939_1.in","r",stdin);
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>T;
	while(T--)clear(),solve();
	xx 0;
}

请问一下这哪里出现了未定义行为,关O2就过了

2024/10/24 21:49
加载中...