【洛谷fromSSL_2020.10.29】魔法药水

魔法药水


在这里插入图片描述
在这里插入图片描述

解题思路

根据样例我们就可以得知:每两个 i i i 就可以合并成一个 i + 1 i+1 i+1 。那么我们推一下即可。

code

#include<iostream>
#include<cstdio>
using namespace std;

int n,a[1000100];
int maxn,ans;

int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		int t;
		scanf("%d",&t);
		a[t]++;
		maxn=max(maxn,t);
	}
	for(int i=0;i<=maxn+100;i++)
		while(a[i]>=2)
			a[i]-=2,a[i+1]++;
	for(int i=0;i<=maxn+100;i++)
		if(a[i])
			ans++;
	cout<<ans<<endl;
}
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页