[蓝桥杯 2024 省 C] 回文数组

题目名字 [蓝桥杯 2024 省 C] 回文数组

题目链接

题意

给n个数字,用最少的次数,通过同时两个数字或单个数字加一或减一使给的这一串数字变成回文数

思路

  1. 字眼最少其实就需要判断出这个大概就是贪心了,不过很可惜比赛的时候就只想到了回文,想破了脑袋。。。
  2. 然后呢我们就需要用到回文的知识点啦,一般是取这串数字的一半来加减的,那么就可以用到一个数组来存储第i个和第n-+1个的差值,有可能会遇到产生负数的情况,所以需要用abs了
  3. 然后就是分情况讨论了,当第i个和第i+1个为正数的时候,就需要取两个数中小的那个数用b[i+1]数组给剪掉,因为sum在循环开始的时候已经加上了b[i]次了

坑点

  1. 不算坑点但是属于是完全有这个知识点,min和max的使用,是在Sstl库函数里面的,以及abs函数的使用
  2. x
  3. x

算法一:XX+XX

时间复杂度

$

实现步骤
  1. x
  2. x
  3. x
代码
cpp 复制代码
 #include<iostream>
#include<algorithm> 
#include<math.h>
using namespace std;
const int N=1e5+10;
long long n,a[N],b[N];
int main(){
long long int sum=0;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i]; 
	}
	for(int i=1;i<=n;i++){
		b[i]=a[i]-a[n-i+1];
	} 
	for(int i=1;i<=n/2;i++){
		sum+=abs(b[i]);
		if(b[i]<0&&b[i+1]<0){
			b[i+1]-=max(b[i],b[i+1]);
		}
		if(b[i]>0&&b[i+1]>0){
			b[i+1]-=min(b[i],b[i+1]);
		}
	}
	cout<<sum;
	return 0;
}
 
相关推荐
CoderYanger11 小时前
动态规划算法-子序列问题(数组中不连续的一段):28.摆动序列
java·算法·leetcode·动态规划·1024程序员节
CoderYanger19 小时前
动态规划算法-子序列问题(数组中不连续的一段):30.最长数对链
java·算法·leetcode·动态规划·1024程序员节
CoderYanger21 小时前
C.滑动窗口——2762. 不间断子数组
java·开发语言·数据结构·算法·leetcode·1024程序员节
智者知已应修善业1 天前
【输入两个数字,判断两数相乘是否等于各自逆序数相乘】2023-10-24
c语言·c++·经验分享·笔记·算法·1024程序员节
CoderYanger2 天前
动态规划算法-子数组、子串系列(数组中连续的一段):21.乘积最大子数组
开发语言·算法·leetcode·职场和发展·动态规划·1024程序员节
CoderYanger2 天前
A.每日一题——3432. 统计元素和差值为偶数的分区方案
java·数据结构·算法·leetcode·1024程序员节
CoderYanger2 天前
动态规划算法-子数组、子串系列(数组中连续的一段):26.环绕字符串中唯一的子字符串
java·算法·leetcode·动态规划·1024程序员节
韩家阿杰3 天前
RabbitMQ技术的使用
1024程序员节
CoderYanger4 天前
动态规划算法-简单多状态dp问题:15.买卖股票的最佳时机含冷冻期
开发语言·算法·leetcode·动态规划·1024程序员节
CoderYanger4 天前
递归、搜索与回溯-FloodFill:33.太平洋大西洋水流问题
java·算法·leetcode·1024程序员节