只有30分,求助大佬,思路有问题吗?
查看原帖
只有30分,求助大佬,思路有问题吗?
242490
lyc呐楼主2020/7/22 23:29
#include<iostream>
#include<algorithm>
#include<iomanip>
#include<vector>
#include<cmath>
using namespace std;
int main()
{
	int l,n,m;
	cin>>l>>n>>m;
	int arr[50000];
	int jl[50001];
	for(int i=0;i<n;i++)
		cin>>arr[i];
	jl[0]=arr[0]-0;
	jl[n]=l-arr[n-1];
	for(int i=1;i<n;i++)
		jl[i]=arr[i]-arr[i-1];
	while(m--)
	{
		int mi=999999999;
		int d=-1;
		for(int i=0;i<n+1;i++)	//找到当前最小距离 
		{
			if(jl[i]==0)
				continue;
			if(mi>jl[i])
				mi=jl[i],d=i;			
		}
		if(d==0)				//拿石头,0表示该处不存在 
			jl[1]+=jl[0],jl[0]=0;
		else if(d==n)
			jl[d-1]+=jl[d],jl[d]=0;
		else
		{
			if(jl[d-1]<jl[d+1])		//选择左边还是右边 
			{						//即选择哪块石头 
				int i;
				for(i=d-1;i>=0;i--)	//忽略掉不存在的位置 
					if(jl[i]!=0)
						break;
				jl[i]+=jl[d];		//更新距离 
			}
			else
			{
				int i;
				for(i=d+1;i<n+1;i++)
					if(jl[i]!=0)
						break;
				jl[i]+=jl[d];				
			}
			jl[d]=0;
		}
	}
	int min=999999999;
	for(int i=0;i<n+1;i++)	//找到当前最小距离 
	{
		if(min>jl[i]&&jl[i]!=0)
			min=jl[i];			
	}	
	cout<<min;
}
2020/7/22 23:29
加载中...