Girls‘ research

作为一名情报工作人员,你现在需要破解一段只由小写字母组成的密文,密文到原文的破解规则如下:

将每个字母破解成它们在字母表中 x 个字母之前的字母(将字母表视为一个环)。例如:若 x=1,则 b 应破解成 a,a 应破解成 z,z 应破解成 y,以此类推。
密文中有大量的为加密而设计的无效信息,真正的有效信息是密文中出现的第一个最长回文。
现在给你一段密文,和这段密文在解密时哪个字母应该被破解为 a,请你破解出这段密文的有效信息,有效信息的长度至少应为 2,否则就认为这段密文无效,输出 “No solution!”。

Tips: 回文是指左右对称的字符串,如 abcba。

标准输入
输入包含多组数据,请一直处理到 EOF。
每组数据仅包括一行:
一个小写字母,表示哪个字母应破解为 a,紧接着一个字符串,表示密文。密文长度不超过 200000。

标准输出
对于每组数据:

如果破解出的有效信息长度 >= 2,则输出两行,第一行输出两个整数,表示你所破解出的有效信息在原始密文中的起始位置和结束位置(下标从0开始计算),第二行输出一个字符串,表示破解出的有效信息。
如果破解出的有效信息长度 < 2,说明密文无效,输出 “No solution!”。
样例输入
b babad
a abcd

样例输出
0 2
aza
No solution!

样例解释
对于第一组样例:
由于破解时 b 破解为 a,由此可以推出 a 应破解为 z,d 应破解为 c,因此由密文破解出的原文为 azazc,这之间的最长回文有两个,分别为 aza 和 zaz,但 aza 更先出现,因此最终破解出的有效信息的起始和结束位置为 0 和 2,内容为 aza。
对于第二组样例:
由于破解时 a 破解为 a,所以可以推出原文为 abcd,由于在原文中没有长度在 2 以上的回文,因此密文无效,输出 No solution!

思路:马拉车模板就是需要一些判断,首先判断一下是否存在一个大于等于2的回文串,有的话找到最长的并且最早出现的位置,因为我们已经把每一个回文串的长度记录了所以遍历一遍就可以了,最后就是找他的起始和终点位置
比如一个串为:##a#b#b#a0,它最长的回文串是以第四个#为回文中心,字母除2-1就是它再原始串的位置,假设#的位置为i那么旁边字母在原始串中的位置为(i-1)/2-1,(i+1)/2-1,然后我们知道回文串的总长度除以二算出来一个方向有多少字母我们就可以求出在原始串中回文串的起始位置和终点位置了
我们设d=(p[i]-1)/2,则st=(i-1)/2-(d-1)-1,end=(i+1)/2+(d-1)-1;
如果最长回文串的回文中心是个字母推的方法类似 st=(i/2)-(p[i]-2)/2-1;end=(i/2)+(p[i]-2)/2-1;
代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
char len[N],s[N];
int p[N],l,L;
void init()
{
	int k=0,kk;
	len[k++]='#';
	for(int i=0;i<l;i++)
	{
		len[k++]='#';
		len[k++]=s[i]; 
	}
	len[k++]='#';
	len[k]=0;
	L=k;
}
int mach()
{
	int id=0,mx=0,maxx=-1,i;
	for(i=1;i<L;i++)
	{
		if(mx>i) p[i]=min(p[2*id-i],mx-i);
		else p[i]=1;
		while(len[i+p[i]]==len[i-p[i]])
		{
			p[i]++;
		}
		if(i+p[i]>mx)
		{
			id=i;
			mx=i+p[i];
		}
		maxx=max(maxx,p[i]);
	}
	return maxx-1;
}
int main()
{
	char c;
	while(~scanf("\n%c %s",&c,s))
	{
		memset(p,0,sizeof(p));
		//memset(len,'\0',sizeof(len));
		l=strlen(s);
		init();
		int t=mach();
		if(t<2)//判断是否存在大于等于2的回文串
		{
			printf("No solution!\n");
			continue;
		}
		else
		{
			int y=c-97;
			for(int i=1;i<L;i++)
			{
				if(p[i]-1==t)//找到最早出现的最长回文串
				{
					if(len[i]=='#')
					{
						int d=(p[i]-1)/2;
						int st=(i-1)/2-(d-1);
						int end=(i+1)/2+(d-1);
						printf("%d %d\n",st-1,end-1);
						for(i=st-1;i<=end-1;i++)
						{
							if(s[i]-y>=97)
							{
								printf("%c",s[i]-y);
							}
							else
							{
								printf("%c",'z'-(97-(s[i]-y)-1));
							}
						}
						printf("\n");
					}
					else
					{
						int st=(i/2)-(p[i]-2)/2;
						int end=(i/2)+(p[i]-2)/2;
						printf("%d %d\n",st-1,end-1);
						for(i=st-1;i<=end-1;i++)
						{
							if(s[i]-y>=97)
							{
								printf("%c",s[i]-y);
							}
							else
							{
								printf("%c",'z'-(97-(s[i]-y)-1));
							}
						}
						printf("\n");
					}
					break;
				}
			}
		}
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 图像去雾是一种图像增强技术,能够消除图像中由雾霾或大气污染导致的模糊和低对比度的问题。对于女孩图片的去雾过程,首先需要对图像进行预处理,包括调整亮度、对比度和色彩平衡等。然后,可以采用不同的去雾算法,如暗通道先验算法或Retinex算法,来恢复图像的清晰度和细节。 在暗通道先验算法中,通过分析图像中的暗通道进行去雾。暗通道是指图像中像素的最小通道值(例如,RGB图像中的最小的R、G和B通道值)。该算法利用自然景物普遍具有暗通道低值的特点,通过计算图像的全局大气光和局部大气光来减小雾霾效果。 另一种常用的算法是Retinex算法,基于对图像中的光照和反射成分进行分解。通过将图像分解为反射成分和光照成分,可以减少雾霾对图像的影响并提高图像质量。Retinex算法能够改善图像的对比度、色彩饱和度和细节。 无论使用哪种算法,图像去雾的成功还取决于输入图像的质量和算法参数的调整。通过适当的参数设置和算法选择,女孩图片的去雾可以使图像更加清晰,细节更加丰富,给人一种更加真实和美丽的感觉。 ### 回答2: 图像去雾是一种图像处理技术,可以用于改善雾天或者雾气较重照片的质量。通过去除照片中的雾霾或雾气,可以让图片更加清晰明亮,还原真实的景物。 针对女生的照片进行图像去雾处理,可以使女生的肤色更加细腻光滑,增加皮肤的自然亮度和鲜活感。在雾气重的照片中,女生的面部特征可能会受到模糊或变形的影响,去雾处理可以恢复面部的细节和轮廓,使得女生更加美丽动人。 此外,图像去雾还可以增强画面的色彩饱和度和对比度,使得女生的服装、配饰和背景等元素更加鲜艳明亮。同时,去除雾霾后的照片可以减少画面中的混沌感,让女生成为画面的焦点,更加突出与背景的对比,达到更好的视觉效果。 总之,图像去雾处理对于女生的照片可以提升照片的质量和美观度,让女生的魅力更加突显。无论是在个人摄影作品中展示自己的美丽,还是在社交媒体上与朋友分享时,经过去雾处理的女生照片都能更好地展现出女生的青春活力和魅力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值