Home > Article > Web Front-end > Codeforces Round #135 (Div. 2)-A. k-String_html/css_WEB-ITnose
k-String
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
A string is called a k-string if it can be represented as k concatenated copies of some string. For example, the string "aabaabaabaab" is at the same time a 1-string, a 2-string and a 4-string, but it is not a 3-string, a 5-string, or a 6-string and so on. Obviously any string is a 1-string.
You are given a string s, consisting of lowercase English letters and a positive integer k. Your task is to reorder the letters in the string sin such a way that the resulting string is a k-string.
Input
The first input line contains integer k (1?≤?k?≤?1000). The second line contains s, all characters in s are lowercase English letters. The string length s satisfies the inequality 1?≤?|s|?≤?1000, where |s| is the length of string s.
Output
Rearrange the letters in string s in such a way that the result is a k-string. Print the result on a single output line. If there are multiple solutions, print any of them.
If the solution doesn't exist, print "-1" (without quotes).
Sample test(s)
input
2aazz
output
azaz
input
3abcabcabz
output
-1
解题思路:给一个串,问是否能由k个相同的串连接而成。
用STL里的map。扫一遍,分别记录每个字符的个数,在判断所有的字符是否是k的倍数,若不是,则输出-1;否则,遍历依次map,每个字符输出(总个数)/k个,然后重复k次即可。
AC代码:
#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <set>#include <map>#include <string>#include <math.h>#include <stdlib.h>#include <time.h>using namespace std;#define INF 0x7fffffffmap<char, int> m;int main(){ #ifdef sxk freopen("in.txt","r",stdin); #endif int n; string s; while(scanf("%d",&n)!=EOF) { cin>>s; int len = s.size(); for(int i=0; i<len; i++) m[s[i]] ++; map<char, int>::iterator it; int flag = 1; for(it=m.begin(); it!=m.end(); it++){ if(it->second % n){ flag = 0; break; } } if(!flag) printf("-1\n"); else{ for(int j=0; j<n; j++){ for(it=m.begin(); it!=m.end(); it++){ for(int i=1; i<=it->second/n; i++) printf("%c", it->first); } } printf("\n"); } } return 0;}