CodeForces 288A Polo the Penguin and Strings

Polo the Penguin and Strings

Description

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 Input

Input

7 4

Output

ababacd

Input

4 7

Output

-1


题意大致就是让你输出n个字母,然后一共要输出k种字母,要求是相邻两个字母不能相同,而且是字母越小越好(也就是这个字符串ASCLL码的和要最小)
所以输出固定为abababa……直到最后几个字母的时候把要求的字母种数补齐
例如n=5,k=4,输出就是abacd
注意:这题的坑在于要考虑n=1,k=1的时候要输出a,n!=1,k=1是无法输出的(不可能让相邻两个字母不同),应该输出-1;

#include <bits/stdc++.h>
using namespace std;

int main()
{
    long n;
    int k;
    scanf("%ld%d",&n,&k);
    if(n==1&&k==1)
    {
        printf("a");
        return 0;
    }
    if(n<k||k==1)
    {
        printf("-1");
        return 0;
    }
    int flag=0;
    char s=99;//ascll s=c
    for(int i=1; i<=n; i++)
    {
        if(i<=n-k+2&&flag==0)
        {
            printf("a");
            flag=1;
        }
        else if(i<=n-k+2&&flag==1)
        {
            printf("b");
            flag=0;
        }
        else if(i>=n-k-2)
        {
            printf("%c",s);
            s++;
        }
    }
    return 0;
}

include< bits/stdc++.h >

这个头文件包含以下等等C++中包含的所有头文件:

include < iostream>
include < cstdio>
include < fstream>
include < algorithm>
include < cmath>
include < deque>
include < vector>
include < queue>
include < string>
include < cstring>
include < map>
include < stack>
include < set>

是一个非常便利提高效率的头文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值