CodeForces - 848A From Y to Y (找规律)

http://codeforces.com/problemset/problem/848/A

 

题目大意:刚开始集合里面都是单字符可认为是字符串,然后让你去合并任意两个串合并要消耗∑c=(a~z) f ( s , c ) * f ( t , c ) 的能量,其中 f ( s , c )表示字符串s中单字符c的个数。现在已知把所有字符合成一行字符串要花费的能量,问这个字符串可能的是?

 

解题思路:当 t 是和 s 中字符都相同的单字符时s和t组合的结果就是s的长度,对于一种字符来说增加的能量就是 l*(l+1)/2。我们从a开始枚举当前l的最大就能够得到最终的结果了,即每种字符所用的个数。

 

AC代码:

 1 #include <iostream>
 2 #include <bits/stdc++.h>
 3 using namespace std;
 4 int main()
 5 {
 6     int n,a[30];
 7     scanf("%d",&n);
 8     memset(a,0,sizeof(a));
 9     for(int  i=0; i<26; i++)
10     {
11         for(int j=400; j>=0; j--)
12         {
13             if(n>=j*(j+1)/2)
14             {
15                 a[i]=j+1;
16                 n=n-j*(j+1)/2;
17                 break;
18             }
19         }
20         if(!n)
21             break;
22     }
23     for(int i=0;i<26;i++)
24     {
25         while(a[i])
26         {
27             printf("%c",i+'a');
28             a[i]--;
29         }
30     }
31     printf("\n");
32     return 0;
33 }

 

posted @ 2017-09-04 17:05  Wally的博客  阅读(215)  评论(0编辑  收藏  举报