CodeForces 624 B. Making a String(贪心)

来源:互联网 发布:金融行业使用软件 编辑:程序博客网 时间:2024/05/21 06:32

Description
要求用n个不同的字母构造一个串,给出串中每种字母出现次数的上限,并要求串中出现过的字母的数量都不同,问串长最多是多少
Input
一个整数n表示字母种数,之后为n个整数ai表示每种字母在串中出现次数使得上限(2<=n<=26,1<=ai<=10^9)
Output
输出最长串长
Sample Input
3
2 5 5
Sample Output
11
Solution
贪心,尽量多的用字母
Code

#include<cstdio>#include<iostream>#include<map>using namespace std;typedef long long ll;int n,a[33];map<int,int>m;int main(){    while(~scanf("%d",&n))    {        m.clear();        for(int i=0;i<n;i++)            scanf("%d",&a[i]),m[a[i]]++;        ll ans=0;        for(int i=0;i<n;i++)        {            int t=a[i];            if(m[t]>1)            {                m[t]--,t--;                while(m[t])t--;            }            m[t]++;            if(t>0)ans+=t;        }        printf("%I64d\n",ans);    }    return 0;}
0 0
原创粉丝点击