Codeforces 849C From Y to Y【思维】
来源:互联网 发布:白袍巫师甘道夫知乎 编辑:程序博客网 时间:2024/06/04 19:06
From beginning till end, this message has been waiting to be conveyed.
For a given unordered multiset of n lowercase English letters ("multi" means that a letter may appear more than once), we treat all letters as strings of length 1, and repeat the following operation n - 1 times:
- Remove any two elements s and t from the set, and add their concatenation s + t to the set.
The cost of such operation is defined to be , where f(s, c) denotes the number of times character cappears in string s.
Given a non-negative integer k, construct any valid non-empty set of no more than 100 000 letters, such that the minimum accumulative cost of the whole process is exactly k. It can be shown that a solution always exists.
The first and only line of input contains a non-negative integer k (0 ≤ k ≤ 100 000) — the required minimum cost.
Output a non-empty string of no more than 100 000 lowercase English letters — any multiset satisfying the requirements, concatenated to be a string.
Note that the printed string doesn't need to be the final concatenated string. It only needs to represent an unordered multiset of letters.
12
abababab
3
codeforces
For the multiset {'a', 'b', 'a', 'b', 'a', 'b', 'a', 'b'}, one of the ways to complete the process is as follows:
- {"ab", "a", "b", "a", "b", "a", "b"}, with a cost of 0;
- {"aba", "b", "a", "b", "a", "b"}, with a cost of 1;
- {"abab", "a", "b", "a", "b"}, with a cost of 1;
- {"abab", "ab", "a", "b"}, with a cost of 0;
- {"abab", "aba", "b"}, with a cost of 1;
- {"abab", "abab"}, with a cost of 1;
- {"abababab"}, with a cost of 8.
The total cost is 12, and it can be proved to be the minimum cost of the process.
题目大意:
我们知道计算方式是多重的,我们现在取总值最小的那个方法。
现在给你一个最小价值k,让你构造一个不超过1e5长度的字符串
思路:
①我们知道,如果我们希望一个字符串的总价值最小,我们肯定是要从左到右依次合并的。
②那么我们如果一个字符串中有x个a的话,那么对应这些字符a贡献的价值是:(x*(x-1))/2;
那么每种字符出现的位子就已经无所谓了。
③那么对应我们发现,输入的值不大,那么对应我们暴力走一下就行,具体参考代码。
Ac代码:
#include<stdio.h>#include<string.h>using namespace std;int main(){ int n; while(~scanf("%d",&n)) { int nowsum=0; for(int i=1;i<=26;i++) { int pos=100; for(int j=1;j<=100;j++) { if(nowsum+j*(j-1)/2>n) { pos=j-1; break; } } for(int j=1;j<=pos;j++)printf("%c",i+'a'-1); nowsum+=(pos*(pos-1))/2; if(nowsum==n)break; } printf("\n"); }}
- Codeforces 849C From Y to Y【思维】
- Codeforces 849 C From Y to Y
- Codeforces 849 C. From Y to Y (技巧)
- Codeforces 849 C. From Y to Y 结论题
- codeforces 848A From Y to Y(思维)
- Codeforces From Y to Y
- C. From Y to Y
- CodeForces #431 Div. 2 849C From Y to Y 贪心 技巧题
- Codeforces Round #431 (Div. 2) 848A From Y to Y(思维)
- Codeforces Round #431 (Div. 2) C. From Y to Y(补题)
- Codeforces Round #431 (Div. 2) From Y to Y
- Codeforces848A-From Y to Y
- Codeforces849C From Y to Y
- Codeforces Round #431 (Div. 2) A、Odds and Ends B、Tell Your World C、From Y to Y
- CF848A From Y to Y【思路】
- codeforce 848A From Y to Y
- CF 848 A. From Y to Y【模拟】
- Convert from type X to type Y
- 【NOIP2012模拟8.9】监听还原
- java中main()方法里面的String[] args;String args[]
- JavaScript 的使用基础总结③
- Java NIO系列教程(十二) Java NIO与IO
- WebService开发(一)
- Codeforces 849C From Y to Y【思维】
- linux最小系统的制作(嵌入式第一节课)
- js trim用法
- WebView 入坑
- 将.sql文件导入Oracle数据库
- 利用背包问题解决的双核处理问题
- MySQL分布式集群之MyCAT的配置文件schema.xml详解
- Python中的random模块
- int.Parse()与int.TryParse()