您的位置:首页 > 大数据 > 人工智能

AIM Tech Round (Div. 2)(B)模拟

2016-02-05 13:44 465 查看
B. Making a String

time limit per test
1 second

memory limit per test
256 megabytes

input
standard input

output
standard output

You are given an alphabet consisting of n letters, your task is to make a string of the maximum possible length so that the following
conditions are satisfied:

the i-th letter occurs in the string no more than ai times;

the number of occurrences of each letter in the string must be distinct for all the letters that occurred in the string at least once.

Input

The first line of the input contains a single integer n (2  ≤  n  ≤  26) —
the number of letters in the alphabet.

The next line contains n integers ai (1 ≤ ai ≤ 109) — i-th
of these integers gives the limitation on the number of occurrences of the i-th character in the string.

Output

Print a single integer — the maximum length of the string that meets all the requirements.

Sample test(s)

input
3
2 5 5


output
11


input
3
1 1 2


output
3


Note

For convenience let's consider an alphabet consisting of three letters: "a", "b",
"c". In the first sample, some of the optimal strings are: "cccaabbccbb",
"aabcbcbcbcb". In the second sample some of the optimal strings are: "acc",
"cbc".

题意:给你N个数字,要你构造一个字符串。每个字符出现的次数都不同,问这个字符串的最长是多少。

题解:直接模拟吧,排序然后插入,我是用SET判重的。还是没过终测,心累。

#include <set>
#include <map>
#include <list>
#include <cmath>
#include <queue>
#include <vector>
#include <cstdio>
#include <string>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <sstream>
#include <algorithm>
#include<functional>
#define LL long long
using namespace std;
#define N 100005
LL a
;
int main()
{
#ifdef CDZSC
freopen("i.txt","r",stdin);
#endif
int n;
while(~scanf("%d",&n))
{
for(int i=1;i<=n;i++)
scanf("%lld",a+i);
sort(a+1,a+n+1);
LL ans=0;
for(int i=1;i<=n;i++)
{
set<LL,greater<LL>>q;
LL tp=0;
for(int j=n;j>=i;j--)
{
LL tmp=a[j];
if(q.count(tmp))
{
for(set<LL,greater<LL>>::iterator it=q.begin();it!=q.end();it++)
{
if(!q.count((*it-1))&&a[j]>=(*it-1))
{
q.insert(*it-1);
break;
}
}
}
else
q.insert(a[j]);
}
for(set<LL>::iterator it=q.begin();it!=q.end();it++)
{
tp+=*it;
}
ans=max(tp,ans);
}
printf("%lld\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: