A. Polo the Penguin and Strings
2014-06-04 14:26
176 查看
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
Little penguin Polo adores strings. But most of all he adores strings of length n.
One day he wanted to find a string that meets the following conditions:
The string consists of n lowercase English letters (that is, the string's length equals n),
exactly k of these letters are distinct.
No two neighbouring letters of a string coincide; that is, if we represent a string as s = s1s2... sn,
then the following inequality holds,si ≠ si + 1(1 ≤ i < n).
Among all strings that meet points 1 and 2, the required string is lexicographically smallest.
Help him find such string or state that such string doesn't exist.
String x = x1x2... xp is lexicographically
less than string y = y1y2... yq,
if either p < q and x1 = y1, x2 = y2, ...
, xp = yp,
or there is such number r (r < p, r < q),
that x1 = y1, x2 = y2, ...
, xr = yr and xr + 1 < yr + 1.
The characters of the strings are compared by their ASCII codes.
Input
A single line contains two positive integers n and k (1 ≤ n ≤ 106, 1 ≤ k ≤ 26) —
the string's length and the number of distinct letters.
Output
In a single line print the required string. If there isn't such string, print "-1" (without the quotes).
Sample test(s)
input
output
input
output
解题说明:此题是一道典型的贪心问题,既要保证字符串中任意两个连续字符串不同,也要保证字典序最小,最简单的想法是只用a,b交替,在最后补上其他字符串即可。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include <algorithm>
#include<cstring>
#include<string>
using namespace std;
int main()
{
int n, k, c, r, i;
scanf("%d%d", &n, &k);
if (k == n&&k <= 26)
{
c = 'a';
for (i = 0; i<k; i++)
{
printf("%c", c + i);
}
printf("\n");
}
else if (k>n || k == 1)
{
printf("-1\n");
}
else
{
for (i = 0; i<n - (k - 2); i++)
{
if (i % 2 == 0)
{
printf("a");
}
else
{
printf("b");
}
}
r = 2;
c = 'a';
for (i; i < n; i++, r++)
{
printf("%c", c + r);
}
printf("\n");
}
return 0;
}
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
Little penguin Polo adores strings. But most of all he adores strings of length n.
One day he wanted to find a string that meets the following conditions:
The string consists of n lowercase English letters (that is, the string's length equals n),
exactly k of these letters are distinct.
No two neighbouring letters of a string coincide; that is, if we represent a string as s = s1s2... sn,
then the following inequality holds,si ≠ si + 1(1 ≤ i < n).
Among all strings that meet points 1 and 2, the required string is lexicographically smallest.
Help him find such string or state that such string doesn't exist.
String x = x1x2... xp is lexicographically
less than string y = y1y2... yq,
if either p < q and x1 = y1, x2 = y2, ...
, xp = yp,
or there is such number r (r < p, r < q),
that x1 = y1, x2 = y2, ...
, xr = yr and xr + 1 < yr + 1.
The characters of the strings are compared by their ASCII codes.
Input
A single line contains two positive integers n and k (1 ≤ n ≤ 106, 1 ≤ k ≤ 26) —
the string's length and the number of distinct letters.
Output
In a single line print the required string. If there isn't such string, print "-1" (without the quotes).
Sample test(s)
input
7 4
output
ababacd
input
4 7
output
-1
解题说明:此题是一道典型的贪心问题,既要保证字符串中任意两个连续字符串不同,也要保证字典序最小,最简单的想法是只用a,b交替,在最后补上其他字符串即可。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include <algorithm>
#include<cstring>
#include<string>
using namespace std;
int main()
{
int n, k, c, r, i;
scanf("%d%d", &n, &k);
if (k == n&&k <= 26)
{
c = 'a';
for (i = 0; i<k; i++)
{
printf("%c", c + i);
}
printf("\n");
}
else if (k>n || k == 1)
{
printf("-1\n");
}
else
{
for (i = 0; i<n - (k - 2); i++)
{
if (i % 2 == 0)
{
printf("a");
}
else
{
printf("b");
}
}
r = 2;
c = 'a';
for (i; i < n; i++, r++)
{
printf("%c", c + r);
}
printf("\n");
}
return 0;
}
相关文章推荐
- A. Polo the Penguin and Strings
- codeforces 288A:Polo the Penguin and Strings
- Codeforces Round #177 (Div. 1) A - Polo the Penguin and Strings
- CUIT ACM Personal Training 11.27(FM)F - Polo the Penguin and Strings
- A. Polo the Penguin and Strings
- A. Polo the Penguin and Segments
- Codeforces Polo the Penguin and Matrix
- CodeForces 288C - Polo the Penguin and XOR operation(思维)
- codeforces 289 B. Polo the Penguin and Matrix
- CodeForces 288C Polo the Penguin and XOR operation
- B. Polo the Penguin and Matrix
- codechef Polo the Penguin and the Tree
- codeforces 289 B. Polo the Penguin and Matrix
- Codeforces Round #177 (Div. 2)---E. Polo the Penguin and XOR operation(贪心)
- codeforces#289_B Polo the Penguin and Matrix
- codeforces#289_B Polo the Penguin and Matrix
- Codeforces Round #177 (Div. 1) C. Polo the Penguin and XOR operation(贪心)
- Codeforces Round #177 (Div. 1)C. Polo the Penguin and XOR operation【贪心】
- CodeForces 288C Polo the Penguin and XOR operation (位运算,异或)
- CF 288C (Polo the Penguin and XOR operation)