Lexicography——CF1267L構造題
L. Lexicography
time limit per test3 seconds
memory limit per test512 megabytes
inputstandard input
outputstandard output
Lucy likes letters. She studied the definition of the lexicographical order at school and plays with it.
At first, she tried to construct the lexicographically smallest word out of given letters. It was so easy! Then she tried to build multiple words and minimize one of them. This was much harder!
Formally, Lucy wants to make n words of length l each out of the given n⋅l letters, so that the k-th of them in the lexicographic order is lexicographically as small as possible.
Input
The first line contains three integers n, l, and k (1≤k≤n≤1000; 1≤l≤1000) — the total number of words, the length of each word, and the index of the word Lucy wants to minimize.
The next line contains a string of n⋅l lowercase letters of the English alphabet.
Output
Output n words of l letters each, one per line, using the letters from the input. Words must be sorted in the lexicographic order, and the k-th of them must be lexicographically as small as possible. If there are multiple answers with the smallest k-th word, output any of them.
樣例輸入1
3 2 2
abcdef
樣例輸出1
af
bc
ed
樣例輸入2
2 3 1
abcabc
樣例輸出2
aab
bcc
題目大意:
給出一個長度為 n * l 的字串,然後構造出一個字串使得第 k 個字串的字典序儘可能的小
PS:本題為一道特判題,可以根據自己的思路進行操作,只要使得第 k 個字串的字典序儘可能小就是了
思路:按照每一位進行處理,在處理每一位的時候,首先處理前 k 個 ,然後在處理從k + 1往後的部分
int n, len, k;
string s[1008];
char yt[maxn];
int cnt[30];///用來統計數量
int main()
{
cin >> n >> len >> k;
cin >> yt;
for (int i = 0; i < n * len; i++) {
cnt[yt[i] - 'a']++;///統計字母的數量
}
int l = 0, r = k - 1;///左右兩側
/// 做出前k個
for (int i = 0; i < len; i++) {///長度,列舉每一位
/// 一開始的時候先處理前k個
for (int j = l; j < k; j++) {/// 1 -- k-1
/// 遍歷26個字母
for (int t = 0; t <= 25; t++) {///按位按照字典序從a->z放置
if (cnt[t]) {///有就放上
s[j] += (t + 'a');///加上這個字元
cnt[t]--;///對應的數量減小1
break;///每次加上一個,然後直接break就好
}
}
}
for (int j = l; j < k; j++) {
if (s[j][i] != s[k - 1][i]) {
while (s[j].size() < len) {///如果同一位不同並且size不到 l 給他放上大的
for (int t = 25; t >= 0; t--) {
if (cnt[t]) {
s[j] += ('a' + t);
cnt[t]--;
break;
}
}
}
l = j + 1;///第j個放好了就直接下一次從j+1開始
}///就順便將j+1賦值給 i
}
}
/// 做從k+1開始的串
for (int i = k; i < n; i++) {
while (s[i].size() < len) {
for (int t = 25; t >= 0; t--) {
if (cnt[t]) {
s[i] += ('a' + t);
cnt[t]--;
break;
}
}
}
}
///cout << s[1] << endl;
sort(s, s + n);
for (int i = 0; i < n; i++) {
cout << s[i] << endl;
}
return 0;
}
相關文章
- CF 構造題
- 構造做題筆記筆記
- CF構造題1600-1800(1)
- CSU 1563 Lexicography (搜尋+組合數)
- 莫隊的 1.5 近似構造 題解
- Java--構造器和構造方法Java構造方法
- C++ 建構函式實戰指南:預設構造、帶引數構造、複製構造與移動構造C++函式
- 構造器
- 構造方法構造方法
- 構造點,線結構
- P7045-[MCOI-03]金牌【構造,互動題】
- codeforces 1438D,思路非常非常巧妙的構造題
- java構造器Java
- AUTOCAD——構造線
- 構造方法20201202構造方法
- 構造有理數~
- 日曆(設計構造器與預設構造器)
- 構造 LL(1) 分析表的步驟與例題解析
- 【軟體構造課程相關】幻方及其構造(上)
- LeetCode 492[構造矩形]LeetCode
- 軟體構造八
- 貪心、構造合集
- 初等雙射構造
- 十七、物件的構造物件
- 14.構造器
- 構造程式碼塊
- 【lombok】@NoArgsConstructor/@RequirArgsConstructor/@AllArgsConstructor - 生成無參構造器,指定引數構造器或包含所有引數的構造器LombokStructUI
- 區分:派生類指定基類建構函式、繼承構造、委託構造函式繼承
- 構造和解構函式呼叫順序函式
- Java基礎、jvm 程式碼塊和構造方法的小問題JavaJVM構造方法
- HT-018 Div3 構造 題解 [ 黃 ] [ 數學 ] [ 結論 ]
- 外測度的構造
- Java構造器 小白版Java
- ARC149C (構造)
- Bob in Wonderland(思維+構造)
- 2.12 構造方法 (5分)構造方法
- 構造二叉樹二叉樹
- 構造方法-2019/2/25構造方法