海南藏族自治州网站建设_网站建设公司_一站式建站_seo优化
2026/1/2 13:40:21 网站建设 项目流程

这是一道简单的构造题。

我们注意到题目中并未说字符不能一样,所以我们可以最大化前面的字符 \(s_1,s_2\dots s_i\)\(1\le i\le n\))的差距使得前面字符的差距为 \(k\),然后剩下的字符就跟 \(s_j\)\(i+1\le j \le n\))一样。

我们每次记一个字符串 \(t\) 来记答案,然后我们每次让 \(k\) 都减去差距,如果最后 \(k\ne 0\),说明不存在一个字符串 \(t\),我们就输出 \(-1\)

AC Code:

#include <bits/stdc++.h>
using namespace std;
int n, k;
string s, t;
int main()
{scanf("%d%d", &n, &k);cin >> s;for (int i = 0; i < n; i++){int x = max('z' - s[i], s[i] - 'a');// cout<<x<<' '<<k<<'\n';if (k < x){if (x == 'z' - s[i]){t += char(s[i] + k);k = 0;}else{t += char(s[i] - k);k = 0;}}else{if (x == 'z' - s[i]){k -= x;t += 'z';}else{t += 'a';k -= x;}}}if(k){puts("-1");return 0;}cout<<t<<'\n';
}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询