原文链接: http://codeforces.com/problemset/problem/219/A
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.
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.
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).
2 aazz
azaz
3 abcabcabz
-1
#include<iostream>
#include<memory.h>
#include<string.h>
using namespace std;
int main()
{
int k;
char str[1001];
int count[26];
while(cin>>k>>str)
{
int g=0;
memset(count,0,sizeof(count));
//用count数组存储每个字母出现的个数
for(int i=0; i<strlen(str); i++)
count[str[i]-'a']++;
//如果出现其中有一个字母的个数不是k的整数倍个,那么肯定不符合题意,即g=1
for(int j=0; j<26; j++)
{
if(count[j]!=0 && count[j]%k!=0)
g=1;
}
//g!=1说明测试例所给的字符串是符合规则的,否则不符合输出-1
if(g!=1)
{
for(int i=0; i<k; i++)
{
for(int j=0; j<26; j++)
{
int len = count[j]/k;
if(count[j]!=0)
{
while(len--)
cout<<(char)(j+'a');
}
}
}
cout<<endl;
}
else
cout<<"-1"<<endl;
}
return 0;
}
#include<iostream>
#include<string>
#include<memory>
#include<vector>
#include<algorithm>
using namespace std;
struct ch
{
int num;
char c;
};
vector<ch>v;
vector<int>v1;
int main()
{
int n;
string a;
while(cin>>n>>a)
{
sort(a.begin(),a.end());
if(n==1)
{
cout<<a<<endl;
continue;
}
v.clear();
v1.clear();
int L=a.length();
for(int i=0;i<L;i++)
{
bool flag=false;
for(int k=0;k<v.size();k++)
{
if(v[k].c==a[i])
{
v[k].num++;
flag=true;
break;
}
}
if(flag==false)
{
ch cc;
cc.c=a[i];
cc.num=1;
v.push_back(cc);
}
}
int j;
int s=v.size();
for(j=0;j<v.size();j++)
{
int r=v[j].num%n;
int r1=v[j].num/n;
v1.push_back(r1);
if(r!=0)
break;
}
if(j!=s)
{
cout<<-1<<endl;
continue;
}
else
{
for(int t=0;t<n;t++)
{
for(int j=0;j<v.size();j++)
{
for(int k=0;k<v1[j];k++)
cout<<v[j].c;
}
}
cout<<endl;
}
}
}