首页 > 其他分享 >CF 628 C Bear and String Distance

CF 628 C Bear and String Distance

时间:2023-11-11 18:11:27浏览次数:30  
标签:Distance dist 输出 int 628 样例 CF 单词 输入

题面翻译

题目描述:

Limak是一只小北极熊。他喜欢单词——只由小写字母构成,长度为n的单词。

他规定dist(s,s')的值为s与s'在26个字母中的间距。如,dist(c,e)=dist(e,c)=2,dist(a,z)=dist(z,a)=25。

而且,当dist两个单词时,其值为dist第一个字母+dist第二个字母+……
如,dist(af,db)=dist(a,d)+dist(f,b)=3+4=7,dist(bear,roar)=16+10+0+0=26。

现在,Limak给你一个字母或单词s和值k,令你寻找一个s'使dist(s,s')=k。输出s'。如果没有合适的s',输出-1。

输入格式

第一行输入两个数:n和k。 ( 1<=n<=10^5
, 0<=k<=10^6
)。

第二行输入只由小写字母构成,长度为n的单词s。

输出格式

如果没有合适的s',输出-1。

否则,输出s',令dist(s,s')=k。

样例 #1

样例输入 #1

4 26
bear

样例输出 #1

roar

样例 #2

样例输入 #2

2 7
af

样例输出 #2

db

样例 #3

样例输入 #3

3 1000
hey

样例输出 #3

-1

思路

简单贪心。按顺序往后,对每一个字符,将其变为与它dist最大的字符(a或者z).d再减去相应的dist,
一直减到d为0,剩余的字母则不变直接输出。若一直到最后一位d仍然大于0,则说明不存在,输出-1.

代码实现

#include<bits/stdc++.h>
using namespace std;
int dist(char a,char b)
{
	return abs((int)a-(int)b);
}
int main()
{
	ios::sync_with_stdio(false);
	int n,k;
	string s;
	cin>>n>>k;
	cin>>s;
	int i=0;
	bool flag=0;
	while(i<n)
	{
		int d=max(dist(s[i],'a'),dist(s[i],'z'));
		if(k-d<=0)
		{
			if(islower(s[i]-k))
			{
				s[i]-=k;
			}
			else
			{
				s[i]+=k;
			}
			flag=1;
			break;
		}
		else
		{
			k-=d;
			if(s[i]<'n')
			{
				s[i]='z';
			}
			else
			{
				s[i]='a';
			}
		}
		i++;
	}
	if(!flag)
	{
		cout<<-1<<endl;
	}
	else cout<<s<<endl;
	return 0;
}

标签:Distance,dist,输出,int,628,样例,CF,单词,输入
From: https://www.cnblogs.com/j1hx-oi/p/17826155.html

相关文章

  • 如何快速纠正VCF文件中REF和ALT的位置错误?
    目录需求描述尝试解决正确解决需求描述一个很简单的需求:一批水稻材料的芯片数据(位点少),想看看它们在3KRice中处于何种亚群和位置。就需要将芯片位点与3KRG位点整合后进行分析。已知3KRice位点可从SNP-Seek中下载:https://snp-seek.irri.org/_download.zul;jsessionid=F2B11FD2......
  • PCF8574芯片介绍及驱动方法
    (文章目录)前言本篇文章带大家学习PCF8574芯片,了解PCF8574芯片有什么作用,以及学习PCF8574的控制方法。一、PCF8574芯片介绍PCF8574是TI(TexasInstruments)公司生产的一种常见的I/O扩展芯片,用于将微控制器的少量GPIO引脚扩展为更多的GPIO接口。它采用I2C总线(串行通信协议)进行与......
  • CF1304E 1-Trees and Queries(lca+树上前缀和+奇偶性)
    题目二话不说,直接按题意模拟暴搜,当然\(O(nq)\)的复杂度显然是寄了的。不过,在模拟的过程中,我在链式前向星的删边中居然一开始错了,还是要mark一下以后注意。voiddel(intx,intpre){ e[top].to=e[top].next=0; h[x]=pre;//h[x]=0;<---tip}intmain(){ ......
  • cf1325D. Ehab the Xorcist(位运算trick)
    https://codeforces.com/contest/1325/problem/D有一个非常经典的结论a+b=(a^b)+2(a&b)这个题就可以往上面靠,首先我们观察一下,对于两个数的情况,如果(v-u)mod2=1,必然无解,试着将它扩展一下,也是对的,因为最低一位没有进位。可以确定的是ans<=3仿照上面的式子,令a=u,b=c=((a+b......
  • CF1393E1/2
    传送门description给定\(n\)个字符串\(S_i\),可以给每个串删除一个字符或者不动。求有多少种操作方案使得最后的\(n\)个字符串(可能有空的),字典序单调不降。\(n\leq10^5\)\(\sum|S_i|\leq10^6\)solution设\(f_{i,j}\)表示考虑前\(i\)个字符串,第\(i\)个字符......
  • CF803G Periodic RMQ Problem
    题目描述给你一个序列\(a\)让你支持\(1\)\(l\)\(r\)\(x\)区间赋值\(2\)\(l\)\(r\)询问区间最小值我们觉得这个问题太水了,所以我们不会给你序列\(a\)而是给你序列一个长度为\(n\)的序列\(b\),把\(b\)复制粘贴\(k\)次就可以得到\(a\)\(n\le10^5,k\le10^4,q\le10......
  • CF1316D Nash Matrix(构造/dfs)
    题目第一次做构造题,做了两节晚自习qwq一开始我完全是正着想,首先\(X\)是显然的,但其他的点就不好做了,然后我就想,可行的一般结论推不出,那就想反例,然后我想啊想......倒是想到了几个,比如说环与环之间不能有相交,环内外的点不能互相到达,跟本举不完,而且也不好实现,还是要想一般结论......
  • CF1485F Copy or Prefix Sum 题解
    思路考虑\(a_i\)要么是\(b_i\)要么是\(b_i-s\)。考虑\(s\)代表着什么。它是\(a\)的前缀和。那么必然是往前一段\(b\)的和。因为每个\(b\)代表着要么是这一位的\(a\)或者前面所有的\(a\)。考虑设\(f_i\)为这个位置填\(b_i\)的方案数。\(g_i\)为这个......
  • CF1485E Move and Swap 题解
    不要什么脑子的带\(log\)做法。思路考虑\(dp_{i,j}\)表示红点到\(i\),蓝点到\(j\)的最大权值。那么有:\[dp_{i,j}=\max(dp_{fa_i,pre},dp_{fa_j,pre})+|a_i-a_j|\]其中\(pre\)是任意一个上一层节点。发现第二维没有用。可以优化:\[dp_i=\max(dp_{fa_i}+\max(|a_i-a_......
  • CF1428F Fruit Sequences 题解
    使用了一种和大多数题解不同的做法。虽然是带\(log\)的。思路首先考虑如何求一个固定左端点的答案。我们发现,每个答案会随着右端点的递增单调不降。而每个答案在增加时会形成若干个区间。例如:11101010111111我们答案增加的区间即为:11100000000111可以发现,这个区间就......