魔法药水


解题思路
根据样例我们就可以得知:每两个 iii 就可以合并成一个 i+1i+1i+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;
}
这篇博客探讨了一个关于合并魔法药水的问题,其中每两个相同等级的药水可以合并成更高等级的一个。作者通过C++实现了一个算法,该算法有效地计算了不同等级药水的数量。主要内容包括输入药水等级,合并过程以及最终结果的输出。

被折叠的 条评论
为什么被折叠?



