MLE六个点,不知道怎么错的,很迷惑
查看原帖
MLE六个点,不知道怎么错的,很迷惑
178336
流落一方楼主2020/9/20 10:17
#include<bits/stdc++.h>
using namespace std;
int n,a[10001],sum=0,flag=0;
void dui(int step,int x)
{
	int which,jh,left,right;
	if(flag==1) return;
	if(step==0)
	{
		jh=a[1];
		a[1]=a[x];
		a[x]=jh;
		flag=1;
		return;
	} 
	if(2*step>x) left=a[step]+1;
	else left=a[2*step];
	if(2*step+1>x) right=a[step]+1;
	else right=a[2*step+1];
	if(left<right)
	{
		which=step*2;
		jh=left;
	}
	else{
		which=step*2+1;
		jh=right;
	}
	if(jh<a[step])
	{
		a[which]=a[step];
		a[step]=jh;
		dui(which,x);
	}
	else{
		dui(step-1,x);
	}
	return;
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	for(int i=n,js=2;i>=1;i--,js--)
	{
		flag=0;
		if(js==0)
		{
			i++;
			a[i]=a[i]+a[i+1];
			sum+=a[i];
			js=2;
		}
		dui(i,i);
	}
	sum+=a[2]; sum+=a[1];
	printf("%d",sum);
	return 0;
}

不知道错在哪里很迷惑

2020/9/20 10:17
加载中...