请教一下这个代码为什么怎么卡都这么慢
查看原帖
请教一下这个代码为什么怎么卡都这么慢
632131
Kevin911楼主2023/12/4 23:16

虽然过了,但是是最劣解,这个代码为什么怎么卡都这么慢啊。。。

#pragma GCC ("Ofast")
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=110;
int n,m,q;
int f[maxn];
inline int read()
{
	int x=0;
	char c=getchar();
	while(c<'0'||c>'9') c=getchar();
	while(c>='0'&&c<='9')
	{
		x=(x<<3)+(x<<1)+(c^48);
		c=getchar();
	}
	return x;
}
void print(int x)
{
	if(x>9) print(x/10);
	putchar(x%10+'0');
}
struct matrix
{
	int a[maxn][maxn];
	void clear()
	{
		for(int i(1);i<=100;++i)
			for(int j(1);j<=100;++j) a[i][j]=0;
	}
}ans,res,r[32];
inline matrix mul(matrix a,matrix b)
{
	matrix c;
	c.clear();
	for(int i(1);i<=n;++i)
		for(int j(1);j<=n;++j)
			for(int k(1);k<=n;++k)
				c.a[i][j]^=1ll*a.a[i][k]*b.a[k][j];
	return c;
}
signed main()
{
	n=read(),m=read(),q=read();
	for(int i(1);i<=n;++i) res.a[1][i]=read();
	for(int i(1);i<=m;++i)
	{
		int u=read(),v=read();
		r[0].a[u][v]=r[0].a[v][u]=1ll;
	}
	for(int i(1);i<=31;++i) r[i]=mul(r[i-1],r[i-1]);
	for(int k(1);k<=q;++k)
	{
		ans=res;
		int x=read();
		for(int i(0);i<=31;++i)
			if(x&(1ll<<i)) ans=mul(ans,r[i]);
		print(ans.a[1][1]);
		putchar('\n');
	}
}
2023/12/4 23:16
加载中...