站外题被卡常求助
  • 板块学术版
  • 楼主WaTleZero_pt
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/7/4 18:07
  • 上次更新2024/7/4 20:08:14
查看原帖
站外题被卡常求助
536745
WaTleZero_pt楼主2024/7/4 18:07

Picture Cannot be Loaded

Picture Cannot be Loaded

时限 1s,但是评测机好慢我最后 20% 的测试点每次都稍微超时几百毫秒,求调。(此题有人通过)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int g[5010][5010];
int n,m;
ll a,b,c,d,p;
int dist[10010];
int main(){
	scanf("%d%d%lld%lld%lld%lld%lld",&n,&m,&a,&b,&c,&d,&p);
	for(int i=1,prev=a;i<=n*m;i++)
		prev=g[(i-1)/m+1][(i-1)%m+1]=(b*prev%p*prev%p+c*prev%p+d)%p;
	ll ans=0;
	memset(dist,0x7f,sizeof(dist));
	dist[1]=0;
	for(int cur=1,oldcur;cur;){
		ans+=dist[cur];
		dist[cur]=-1; oldcur=cur; cur=0;
		if(oldcur<=n){
			for(int j=n+1;j<=n+m;j++){
				if(dist[j]>g[oldcur][j-n]) dist[j]=g[oldcur][j-n];
				if(dist[cur]>dist[j]&&dist[j]!=-1) cur=j;
			}
			for(int j=1;j<=n;j++)
				if(dist[cur]>dist[j]&&dist[j]!=-1) cur=j;
		}else{
			for(int j=1;j<=n;j++){
				if(dist[j]>g[j][oldcur-n]) dist[j]=g[j][oldcur-n];
				if(dist[cur]>dist[j]&&dist[j]!=-1) cur=j;
			}
			for(int j=n+1;j<=n+m;j++)
				if(dist[cur]>dist[j]&&dist[j]!=-1) cur=j;
		}
	}
	printf("%lld",ans);
}

2024/7/4 18:07
加载中...