RE求助
  • 板块灌水区
  • 楼主ABookCD
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/2/26 20:03
  • 上次更新2023/10/28 07:40:35
查看原帖
RE求助
502702
ABookCD楼主2022/2/26 20:03
#include<bits/stdc++.h>
#define LL long long 
using namespace std;
const  LL maxn=4110;
LL  a[maxn];
struct node{
	LL  v,w;
	node (LL  uu,LL vv){
		v=uu;
		w=vv;
	}
};
const long long N=810010;
vector<node> G[N];
set<pair<LL,LL> > min_heap;
LL d[N];
int main(){
	LL n,m;
	cin>>n>>m;
	int cnt=n;
	LL mini=0x3f3f3f;
	for(LL i=1;i<=n;i++){
		cin>>a[i];
		mini=min(mini,a[i]);
	}
	for(LL i=1;i<=m;i++){
		for(LL j=1;j<=n;j++){
			a[++cnt]=a[j]-i;
		}
	}
	const LL mod=mini-m;
	for(LL i=0;i<mod;i++){
			for(LL j=1;j<=cnt;j++){
				LL x=a[j];
				LL y=(i+a[j])%mod;
				G[i].push_back(node(y,x));
			}
		
	}
	if(mini<=1) {
		cout<<"-1";
		return 0;
	}
	LL gd=a[1];
	for(int i=2;i<=cnt;i++){
		gd=__gcd(gd,a[i]);
	} 
	if(gd!=1){
		cout<<"-1";
		return 0;
	}
	memset(d,0x7f,sizeof(d));
	 d[0]=0;
	 min_heap.insert(make_pair(0,0));
	 while(min_heap.size()){
	 	long long  mind=min_heap.begin() ->first;
	 	long long  v=min_heap.begin() ->second;
	 	min_heap.erase(min_heap.begin());
	 	for(long long  i=0;i<G[v].size();i++){
	 		if(d[G[v][i].v]>d[v]+G[v][i].w) {
	 			min_heap.erase(make_pair(d[G[v][i].v],G[v][i].v));
	 			d[G[v][i].v]=d[v]+G[v][i].w;
				min_heap.insert(make_pair(d[G[v][i].v],G[v][i].v));
			 }
		 }
	 }
	 LL ans=0;
	 for(LL i=0;i<mod;i++)  ans=max(ans,d[i]);
	 cout<<ans-mod;
	return 0;	
}

出现了奇怪的RE,P2662 40分求调

2022/2/26 20:03
加载中...