首页 > 其他分享 >【题解】[ABC286C] Rotate and Palindrome 题解

【题解】[ABC286C] Rotate and Palindrome 题解

时间:2023-01-28 20:22:45浏览次数:62  
标签:Rotate 题解 位置 ABC286C include 字符串 指针 回文

更好的阅读体验

洛谷题目传送门 | AT 原题传送门

思路

观察题目可以发现 A 操作最多只能执行 \(n\) 次,超过以后字符串又会回到初始状态。

首先考虑 A 操作如何实现,一种办法是将 \(S\) 在原串后复制一遍,通过移动一个记录初始位置的指针(本文中为 \(i\))来实现截取 \(n\) 位字符。每次移动指针代价都为 \(A\)。

接下来考虑 B 操作的代价计算。我们可以判断之前截取的字符串是否为回文。回文字符串判断应该都会吧通过移动起始位置和结束位置指针,比较两指针对应的字符是否相同进行回文判断,每次遇到不同,总代价都加 \(B\)。

值得注意的是结束位置指针的取值。每次 A 操作执行完成,截取出的字符串末位下标为 \(n+i-1\),在此基础上再减去起始位置即可。

回文判断部分代码:

/*i 为 A 操作中起始位置指针,t 为总代价*/
for(int j=0;j<n/2;j++)//回文判断循环变量只需到 n/2
{
	int x=i+j;//起始位置
	int y=n+i-1-j;//结束位置
	if(s[x]!=s[y])
	{
		t+=b;
	}
}

以 A 操作中起始位置指针作为外层循环变量,范围 \(0\sim n-1\),内层循环为回文串判断。总时间复杂度 \(O(n^2)\)。

一些小细节

  • 观察数据范围可知需使用 \(\text{long long}\);

  • 最大值可取值 \(2^{62}\) 即 1ll<<62

完整代码

#include<cstdio>
#include<string>
#include<iostream>
#define INF 1ll<<62
#define ll long long
#define int ll
using namespace std;
int n,a,b;
int ans=INF;
string s;
signed main()
{
	scanf("%lld%lld%lld",&n,&a,&b);
	cin>>s;
	s+=s;
	for(int i=0;i<n;i++)
	{
		int t=a*i;
		for(int j=0;j<n/2;j++)
		{
			int x=i+j;
			int y=n+i-1-j;
			if(s[x]!=s[y])
			{
				t+=b;
			}
		}
		ans=min(ans,t);
	}
	printf("%lld\n",ans);
	return 0;
}

标签:Rotate,题解,位置,ABC286C,include,字符串,指针,回文
From: https://www.cnblogs.com/makerlife/p/solution-ABC286C.html

相关文章

  • 【题解】[IOI2018] werewolf 狼人
    题目分析这个题本身很简单,可能就是因为是IOI题所以看上去就难了些吧。其实题目就是让我们先走一段全部大于等于\(l\)的点然后再走一段全部小于等于\(r\)的点,那么能......
  • xhost: unable to open display ""问题解决
    一、需求xhost可是增强vnc的图形界面显示二、问题解决设置一下dispaly  通过执行exportDISPLAY=x.x.x.x:1,x.x.x.x指的是虚拟机ip地址,DISPLAY用来设置将图形显示......
  • 视频美颜sdk疑难问题解答
    目前,美颜sdk已经成了大多数直播、视频平台的刚需,因为这是用户需求,同样也是市场的风向。随着需求量的暴增,视频美颜sdk一些技术向的提问也多了起来,今天小编就为大家讲解一下视......
  • # CF#847 (Div. 3)ABCDE题解
    CodeforcesRound#847(DFiv.3)APolycarpandtheDayofPiProblem-A-Codeforces题目描述OnMarch14,thedayofthenumber$\pi$iscelebratedallov......
  • 【题解】洛谷-P5643 [PKUWC2018]随机游走
    用到了概率期望的很多技巧。首先要求的是走遍集合中所有节点步数的期望,也就是步数最大值的期望,根据\(\text{min-max}\)容斥,有:\[E\left(\max_{i\inS}x_i\right)=\sum_......
  • 题解 CF1670F【Jee, You See?】
    problem给出常数\(n,z\),令\(F(m)\)表示所有满足以下条件的数列\(\{a_i\}\)的数量:\(\{a_i\}\)有\(n\)项,都是非负整数。它们的和不大于\(m\)。它们的异或和恰......
  • 【ElementPlus】el-menu侧边垂直菜单折叠后图标会消失的问题解决
    首先上代码<template><templatev-for="subIteminmenuList":key="subItem.path"><!--有子菜单--><el-sub-menuv-if="subItem.children&&s......
  • CF908G 题解
    题意传送门给\(x\le10^{700}\),问\(1\)到\(x\)中每个数在各数位排序后得到的数的和。答案模\(10^9+7\)。题解学到一种新鲜的转化方式,来记一下。将\(x\)的位数......
  • Codeforces 708 A-E1题解
    A.Meximization这道题问给一些数,如何让前缀的mex之和最大,那么首先,我们要抬mex的话肯定是要把前面都铺垫完的,所以在i位置确定的时候,i+1自然是越大越好,可以证明i+1的位......
  • Atcoder ABC244E - King Bombee 题解
    原题:AtcoderABC244E-KingBombee题意给你一张图,从\(S\)到\(T\),经过\(k\)条边,经过\(X\)号点偶数次的方案数。做法设\(f_{i,j,k}\)表示经过\(i\)条边,......