for和while有什么区别?求大佬解答
  • 板块P1119 灾后重建
  • 楼主liu006
  • 当前回复10
  • 已保存回复10
  • 发布时间2023/7/16 11:08
  • 上次更新2023/11/3 09:34:40
查看原帖
for和while有什么区别?求大佬解答
691247
liu006楼主2023/7/16 11:08

本蒟蒻调了将近两个小时的代码(吸氧后50,非A即T):

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
long long n,m,timex[205],road[205][205],q,x[50005],y[50005],t[50005],tx,ty,fo[205][205],t_n,v_num[50005]; 
bool v[205];
int main(){
	memset(fo,0x3f3f3f3f,sizeof(fo));
	scanf("%lld%lld",&n,&m);
	for(long long i=0;i<n;i++){
		scanf("%lld",&timex[i]);
		fo[i][i]=0;
	}
	for(long long i=0;i<m;i++){
		scanf("%lld%lld",&tx,&ty);
		scanf("%lld",&fo[tx][ty]);
		fo[ty][tx]=fo[tx][ty];
	}
	scanf("%lld",&q);
	for(long long i=0;i<q;i++){
		scanf("%lld%lld%lld",&x[i],&y[i],&t[i]);
	}
	int j;
	for(long long i=0;i<q;i++){
		for(j=0;timex[j]<=t[i]&&j<n;j++){
			for(long long k=0;k<n;k++){
				for(long long l=0;l<n;l++){
					if(fo[k][l]>fo[k][j]+fo[j][l]){
						fo[k][l]=fo[k][j]+fo[j][l];
					}
				}
			}
		} 
		if(timex[x[i]]>t[i]||timex[y[i]]>t[i]||fo[x[i]][y[i]]>=0x3f3f3f3f) printf("-1\n");
		else printf("%lld\n",fo[x[i]][y[i]]);
	}
	return 0;
} 

看了题解以后改的(吸氧后AC):

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
long long n,m,timex[205],road[205][205],q,x[50005],y[50005],t[50005],tx,ty,fo[205][205],t_n,v_num[50005]; 
bool v[205];
int main(){
	memset(fo,0x3f3f3f3f,sizeof(fo));
	scanf("%lld%lld",&n,&m);
	for(long long i=0;i<n;i++){
		scanf("%lld",&timex[i]);
		fo[i][i]=0;
	}
	for(long long i=0;i<m;i++){
		scanf("%lld%lld",&tx,&ty);
		scanf("%lld",&fo[tx][ty]);
		fo[ty][tx]=fo[tx][ty];
	}
	scanf("%lld",&q);
	for(long long i=0;i<q;i++){
		scanf("%lld%lld%lld",&x[i],&y[i],&t[i]);
	}
	for(long long i=0;i<q;i++){
		while(timex[j]<=t[i]&&j<n){
			for(long long k=0;k<n;k++){
				for(long long l=0;l<n;l++){
					if(fo[k][l]>fo[k][j]+fo[j][l]){
						fo[k][l]=fo[k][j]+fo[j][l];
					}
				}
			}
			j++;
		} 
		if(timex[x[i]]>t[i]||timex[y[i]]>t[i]||fo[x[i]][y[i]]>=0x3f3f3f3f) printf("-1\n");
		else printf("%lld\n",fo[x[i]][y[i]]);
	}
	return 0;
} 

两者只有一个循环有不同,就是一个用for,一个用while,结果相差50分,有大佬知道是什么问题吗?(解答必关)

2023/7/16 11:08
加载中...