10分求助
查看原帖
10分求助
605945
luo_xiaoran楼主2022/11/18 14:32
#include<bits/stdc++.h>
using namespace std;
int a[20010];
int main()
{
	int s=0,n,o=-1;
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		int p;
		scanf("%d",&p);
		a[p]++;
	}
	for(int i=0;i<=20001;i++)
	{
		if(n==1)
		{
			break;
		}
		if(!a[i])
		{
			continue;
		}
		if(a[i]%2==0)
		{
			if(o+1==0)
			{
				if(a[i+i])
				{
					n--;
				}
				s+=(a[i]*i);
				a[i+i]+=(a[i]/2);
				a[i]=0;
			}
			else
			{
				n--;
				n-=a[i];
				a[o+i]++;
				a[i+i]+=(a[i]/2);
				s+=(a[i]-2)*i;
				s+=(o+i);
				o=i;
				a[i]=0;
			}
		}
		else
		{
			if(n==1)
			{
				break;
			}
			if(o+1==0)
			{
				a[i+i]+=(a[i]/2);
				o=i;
				a[i]--;
				s+=(a[i]*i);
				a[i]=0;
			}
			else
			{
				n--;
				a[i+o]++;
				s+=(o+i);
				o=-1;
				a[i]--;
				if(a[i])
				{
					n--;
				}
				a[i+i]+=(a[i]/2);
				s+=(a[i]*i);
				a[i]=0;
			}
		}
	}
	printf("%d",s);
	return 0;
}

第一个点AC,其它RE?

2022/11/18 14:32
加载中...