提交 AC,本地 RE 是怎么回事?
  • 板块学术版
  • 楼主OldDriverTree
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/12/26 22:45
  • 上次更新2023/12/26 23:32:13
查看原帖
提交 AC,本地 RE 是怎么回事?
681036
OldDriverTree楼主2023/12/26 22:45

rt,P6772 中提交以下代码能过 4 个点,而本地怎么直接运行错误啊,就是不输入就 RE 了

把快速幂部分注释掉就行了

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=250;
int n,m,T,k,l;
int c[N];

int read() {
	int x=0; char c=0; while (!isdigit(c) ) c=getchar();
	while (isdigit(c) ) x=(x<<3)+(x<<1)+(c&15),c=getchar();
	return x;
}
struct Matrix
{
	ll a[N][N];
	Matrix() { memset(a,0xcf,sizeof a); }
	void I() { for (int i=0;i<l;i++) a[i][i]=0; }
	Matrix friend operator *(Matrix a,Matrix b)
	{
		Matrix c;
		for (int i=0;i<l;i++)
			for (int j=0;j<l;j++)
				for (int k=0;k<l;k++)
					c.a[i][j]=max(c.a[i][j],a.a[i][k]+b.a[k][j]);
		return c;
	}
}ans,base;

int main()
{
	n=read(),m=read(),T=read(),k=read(),l=n*5;
	for (int i=0;i<n;i++) c[i]=read();
	while (m--) {
		int x=read()-1,y=read()-1;
		base.a[x][n*(read()-1)+y]=c[y];
	}
	ans.I();
	for (int i=0;i<n;i++)
		for (int j=1;j<5;j++)
			base.a[n*j+i][n*(j-1)+i]=0;
	
	while (T) {
		if (T&1) ans=ans*base;
		base=base*base,T>>=1;
	}
	if (ans.a[0][0]<0) printf("-1");
	else printf("%lld",ans.a[0][0]+c[0]);
	return 0;
}
2023/12/26 22:45
加载中...