2023 江苏CCPC A. Today‘s Word

A. Today's Word

time limit per test: 1 second

memory limit per test: 256 megabytes

You have accepted an offer at VortaroEnMano Inc., a company committed to creating the most comprehensive Esperanto dictionary. Esperanto estas tre mojosa lingvo, so you work really hard to do your best -- mostly to keep your job in the depression of employment.

Today, you're assigned to refactor the function called "Hodiaŭa Vorto", i.e. "Today's Word" in English. This word is generated from a string, denoted as .

Here's how is generated:

1.The process begins with an initial string, , which is given. This string contains only lowercase English letters and has an even length.

2.For n≥1, is generated in the following way:

, where is the length of and +

is used to concatenate the strings. Note that the index of the string starts from 0.

The function next(S) increments each character in the string S to the next letter in the alphabet, i.e., a changes to b , b to c, and so on, with z changing to a. For instance, next(abz)=bca.

Your task is to determine the suffix of with a length of m.

Input

The first line contains two integers n

and m (1≤n,m≤), representing the length of and the length of the desired suffix, respectively. It is guaranteed that n is an even number.

The second line contains a string, , composed of n lowercase English letters.

Output

Output a string of length m, which represents the suffix you are tasked to determine.

Example

input

6 10

bocchi

output

wrwxrwxsxy

Note

In the provided example, S1=bocbocchidij.

【思路分析】

递推+构造+模拟。直接模拟,从的后缀暴力构造,由于每次长度倍增,时间复杂度为.

cpp 复制代码
#include <iostream>
#include <vector>
#include <unordered_map>
#include <map>
#include <cmath>
#include <algorithm>
#include <climits>
#include <stack>
#include <cstring>

#define i64 long long

using namespace std;

void getString(string &s) {
    for (auto &item: s) {
        if (item + 16 <= 'z') item = item + 16;
        else item = 16 - ('z' - item) + 'a' - 1;
    }
}

void moveForwardString(string &s) {
    for (auto &item: s) {
        if (item - 1 < 'a') item = 'z';
        else item -= 1;
    }
}

void moveBackString(string &s) {
    for (auto &item: s) {
        if (item + 1 > 'z') item = 'a';
        else item += 1;
    }
}

void solve() {
    i64 n, m;
    cin >> n >> m;
    string s, tmp;
    cin >> s;
    string sub = s.substr(n / 2, n / 2);
    getString(sub);
    int cnt = 4;
    for (int i = 4 * n; i >= n / 2; i -= n / 2) {
        tmp.insert(0, sub);
        if (cnt == 4 || cnt == 2) moveForwardString(sub);
        cnt--;
        if (cnt == 0) {
            cnt = 4;
            moveBackString(sub);
        }
    }
    for (int i = 0;i < 25;i++) {
        cnt = 4;
        sub = tmp;
        if (tmp.length() >= m) break;
        tmp.clear();
        for (int i = 4 * n; i >= n / 2; i -= n / 2) {
            tmp.insert(0, sub);
            if (cnt == 4 || cnt == 2) moveForwardString(sub);
            cnt--;
            if (cnt == 0) {
                cnt = 4;
                moveBackString(sub);
            }
        }
    }
    cout<<tmp.substr(tmp.length()-m,m);
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int t = 1;
//    cin >> t;
    while (t--) {
        solve();
    }
    return 0;
}
相关推荐
阿里嘎多学长5 小时前
2026-10-20 GitHub 热点项目精选
开发语言·程序员·github·代码托管
布吉岛的石头6 小时前
Java 程序员第 50 阶段2:预训练的目标函数:自回归语言建模本质
java·开发语言·人工智能·深度学习·回归·transformer
小羊没烦恼!6 小时前
铁道部新客票系统设计(二)
开发语言·前端·数据库·python·oracle·c#·php
quantdash_cc7 小时前
从实时行情到价格观察表:用 Python 和 Pandas 构建策略输入数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
昂好的day8 小时前
VisionMaster 通信模块实战(上):Modbus、TCP 收发、协议组装解析
开发语言·网络·网络协议·tcp/ip·c#
努力实干9 小时前
面向对象设计原则——C++
开发语言·c++·数码相机
NetX行者10 小时前
四语言 Hello World 背后:编译模型与运行时对比
开发语言
波力海苔夹心脆67511 小时前
C# 正则表达式零基础入门:从“看得懂“到“会用“
经验分享·后端·mysql·正则表达式·c#
Pin_Qing11 小时前
账单没超,请求先被拒了
大数据·开发语言·人工智能
2601_9628857211 小时前
如何用 Python 计算 VaR 和 CVaR(在险价值)?
开发语言·python