D. Min Cost String
如果满足s[i]=s[j]并且s[i+1]=s[j+1],那么产生一个贡献
要求给你一个k表示只能使用前k个字母,构造出长度为n的字符串,使其总贡献最小。
a ab ac ad ... b bc bd be ... y yz z作为一一个长度为2的块不重复的零贡献周期 重复这个周期一定是最优的
为什么?
这样的周期接周期 ,每次相同的块数量只多一个。
而每块的花费是 块数*(块数-1)/2 (想一想为什么)
如果那另 a块 次数增加 b块次数对应减少 发现贡献是变大了的
所以尽量让各个块之间出现次数相等
cin>>n>>k; while(1){ for(int i=0;i<k;++i){ for(int j=i;j<k;++j){ cout"<<(char)('a'+i); n--; if(n==0) return ; if(j!=i){ cout<<(char)('a'+j); n--; } if(n==0) return ; } } }