1. 程式人生 > >sincerit 這是一個沙雕題I(坑比較多)

sincerit 這是一個沙雕題I(坑比較多)

連結:https://ac.nowcoder.com/acm/contest/289/I
來源:牛客網

題目描述
因為毒瘤出題人出的題都太難了,於是gugugu打算出一個簽到題,(就是這題啦),這題很簡單,給定一個字串,請問你重新排序後能不能組成K個相同的字串。
輸入描述:
多組資料輸入,第一行輸入k表示需要k個相同的字串個數,第二行給出指定的字串s。字串長度l (1≤ k ≤ l ≤ 100)

輸入的字串僅由小寫字母組成
輸出描述:
對於每組資料輸出一行:

如果能組成k個相同的字串,就輸出重新組合後的字串,(輸出重複子串字典序最小的那一組),否則輸出-1

暖心學長Hang怕你們不懂字典序,所以
在這裡插入圖片描述


字典序:
字典序比較大小的方式就是,從第一位逐位比較,如果這一位不相等,那麼肯定有大小之分,大的就大,小的就小,如果相同,找下一位,和字串長度沒有關係,只有s1的全部字元都和s2的前strlen(s1)位都相等的情況,s2更長,所以更大

如:aaa>aa,abc>aaaa,ad>abcd

示例1
輸入
複製
2
abba
輸出
複製
abab

自己想的特殊資料
2
aaaabbbb
aabbaabb

字串的問題可以考慮轉換成數字範圍是0~25,用桶排序就可以確定字典序了
首先我考慮的是是不是給出的字串都要用上還是隻用字串的一部分
原來都要用上

#include
<stdio.h>
#include <cstring> int cnt[30]; char str[1000]; int main() { int k; while (~scanf("%d", &k)) { scanf(" %s", str); memset(cnt, 0, sizeof(cnt)); for (int i = 0; i < strlen(str); i++) ++cnt[str[i]-'a']; int flag = 1; for (int i = 0; i < 26; i++) { if
(cnt[i] != 0 && cnt[i] % k != 0) { // aaaabbbb == aabbaabb flag = 0; break; } } if (flag == 0) printf("-1\n"); else { int s = k; while (k--) { for (int i = 0; i < 26; i++) { if (cnt[i]) { for (int t = 1; t <= cnt[i]/s; t++) printf("%c", i+'a'); } } } printf("\n"); } memset(str, 0, sizeof(str)); } return 0; }