codeforces624B Making a String 贪心 排序
来源:互联网 发布:史丹利的寓言 mac 编辑:程序博客网 时间:2024/06/08 13:28
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.
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.
Print a single integer — the maximum length of the string that meets all the requirements.
32 5 5
11
31 1 2
3
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".
从大到小排序,用一个map来唯一标示,遇到标记过的不断减一,直到减到这个数之前没有出现过,累加,依次进行到底
#include <cstdio>#include <algorithm>#include <iostream>#include <map>using namespace std;int a[30];map<int, int> m;bool cmp(int x, int y) {return x > y;}int main(){int n;while (~scanf("%d", &n)) {m.clear();for (int i = 0; i < n; i++) {scanf("%d", &a[i]);}sort(a, a + n, cmp);long long ans = 0;for (int i = 0; i < n; i++) {if (m[a[i]] == 0) {m[a[i]]++;ans += a[i];} else {while (a[i] > 0) {if (m[--a[i]] == 0) {m[a[i]]++;ans += a[i];break;}}}}printf("%I64d\n", ans);}return 0;}
- codeforces624B Making a String 贪心 排序
- cf#AIM Tech Round -B. Making a String-贪心/set
- CodeForces 624 B. Making a String(贪心)
- CodeForces 624B Making a String(贪心)
- CF624B - Making a String
- B. Making a String
- Making a String
- B. Making a String【水题】
- AIM Tech Round (Div. 2)-B. Making a String(贪心)
- Codeforces 624B Making a String 【水题】
- B - Making a String-----CodeForces 624B
- CodeForces 624B Making a String
- CodeForces 624B - Making a String
- UVa12210 - A Match Making Problem(排序)
- AIM Tech Round (Div. 2)--B. Making a String
- Codeforces AIM Tech Round (Div. 2) B. Making a String
- CodeForces 230A 贪心+排序
- Making a Kite
- NLP学习网址
- 算法训练 s01串 (简单递归)
- Hdu 2186 悼念512汶川大地震遇难同胞——一定要记住我爱你【基础】
- SpringIoc:将xml文档中的bean写入beanfactory
- 326. Power of Three
- codeforces624B Making a String 贪心 排序
- hrbust 哈理工oj 1633 word!word!【欧拉路、欧拉回路的有向图判断】
- 63. Unique Paths II
- OC基础
- 杭电oj 2018 母牛的故事
- groovy/java自实现json解析器(3)JsonArray
- Sorting Railway Cars----CodeForces 605A
- 深入Java虚拟机读书笔记之高效并发
- Android spannableStringBuilder用法整理