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 }