这有影响吗?
  • 板块P2083 找人
  • 楼主alpharchmage
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/3/13 17:50
  • 上次更新2023/10/28 06:39:49
查看原帖
这有影响吗?
411141
alpharchmage楼主2022/3/13 17:50

我把2000改成1000就过了。。。

按理说2000WA了一个点,那改小了只是降低了大小,怎么会A了呢?

90pt

/*
	Name: pvz_bt
	Copyright: pvz_bt
	Author: pvz_bt
	Begin Time : 13/03/22 16:47
	End Time : 
	Description: C++
*/
#include<bits/stdc++.h>
using namespace std;
long long n=0,m=0,v=0,x=0,y=0,goal=0,cnt=0,ans=1e18;
long long head[1000001];
struct node{
	long long to;
	long long next;
}edge[2000001];
void new_line(long long a,long long b){
	edge[++cnt].to=b;
	edge[cnt].next=head[a];
	head[a]=cnt;
	return;
}
long long dfs(long long x,long long step,long long sum){
	if(step>n*m)
		return 1e18;
	if(x==goal)
		return sum;
	return dfs(edge[head[x]].to,step+1,sum+v*abs((x/2000)-(edge[head[x]].to/2000)));                                                                     
}
int main(){
	scanf("%lld%lld%lld%lld%lld",&n,&m,&v,&x,&y);
	goal=x*2000+y;
	for(long long i=1;i<=n;++i){
		for(long long j=1;j<=m;++j){
			long long a=0,b=0;
			scanf("%lld%lld",&a,&b);
			new_line(i*2000+j,a*2000+b);
		}
	}
	for(long long i=1;i<=m;++i)
		ans=min(ans,dfs(2000+i,1,0));
	if(ans==1e18)
		printf("impossible\n");
	else
		printf("%lld\n",ans);
	return 0;
}

100pt

/*
	Name: pvz_bt
	Copyright: pvz_bt
	Author: pvz_bt
	Begin Time : 13/03/22 16:47
	End Time : 
	Description: C++
*/
#include<bits/stdc++.h>
using namespace std;
long long n=0,m=0,v=0,x=0,y=0,goal=0,cnt=0,ans=1e18;
long long head[1000001];
struct node{
	long long to;
	long long next;
}edge[2000001];
void new_line(long long a,long long b){
	edge[++cnt].to=b;
	edge[cnt].next=head[a];
	head[a]=cnt;
	return;
}
long long dfs(long long x,long long step,long long sum){
	if(step>n*m)
		return 1e18;
	if(x==goal)
		return sum;
	return dfs(edge[head[x]].to,step+1,sum+v*abs((x/1000)-(edge[head[x]].to/1000)));                                                                     
}
int main(){
	scanf("%lld%lld%lld%lld%lld",&n,&m,&v,&x,&y);
	goal=x*1000+y;
	for(long long i=1;i<=n;++i){
		for(long long j=1;j<=m;++j){
			long long a=0,b=0;
			scanf("%lld%lld",&a,&b);
			new_line(i*1000+j,a*1000+b);
		}
	}
	for(long long i=1;i<=m;++i)
		ans=min(ans,dfs(1000+i,1,0));
	if(ans==1e18)
		printf("impossible\n");
	else
		printf("%lld\n",ans);
	return 0;
}
2022/3/13 17:50
加载中...