Gym - 102058L :Repetitive Palindrome (回文串判断)

https://vjudge.net/problem/Gym-102058L

You are given a string s consisting of lowercase alphabets, and an integer k.

Make a new string t

by concatenating k copies of s. Determine whether t is a palindrome, e.g. is the same backward as forward.

Input

The first line contains a string s

consisting of lowercase alphabets. (1≤|s|≤250000)

The second line contains an integer k. (1≤k≤1018)

Output

If t is a palindrome, print YES. If not, print NO.

Examples

Input

abc
3

Output

NO

Input

abba
1

Output

YES

题意分析:

给出一个字符串s,问将k个s连接起来是不是回文串。

解题思路:

k的范围很大,所以不能直接求解,

仔细想想如果  s 是一个回文串,不管k是奇数还是偶数,都能保证连接起来是回文串;

相反,如果 s 不是回文串, 那么合成的字符串的开头的 s 和末尾的 s 肯定会有不相同的,

例如s="abs"不管k是多少,合成后的字符串肯定是    abs......abs,中间的不看,开头和末尾肯定不能构成回文串。

所以只要判断 s 是否为回文串即可。

#include <stdio.h>
#include <string.h>
#define N 250020
char str[N];
int Judge()
{
	int len=strlen(str);
	for(int i=0; i<=len/2; i++)
		if(str[i]!=str[len-i-1])
			return 0;
	return 1;
}
int main()
{
	int k;
	while(scanf("%s%d", str, &k)!=EOF)
	{
		if(Judge())
			printf("YES\n");
		else
			printf("NO\n");
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张宜强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值