「杂题乱刷」洛谷P9253

题目链接

P9253 [PA 2022] Ornitolog 2

题目简述

给定一个音高序列,输出最少要修改多少整数才能使这个序列成为交替鹡鸰鸟鸣的音高序列。

题意分析

操作后的音高序列总共有 2 种可能:

  1. 音量由高变低再由低变高;

  2. 音量由低变高再由高变低。

又因为大小范围是 104×5,因此将数组开大一点定义大小为 105+10

这样也需要考虑 2 种情况:

  1. 如果 i 为偶数,且 ai1ai,那么将对应的 sum 增加 1,将 pd 设为 true

  2. 如果 i 为奇数,且 ai1ai,那么将对应的 sum 增加 1,将 pd 设为 true,否则将 pd 设为 false

最后只需要输出两种情况所需要的操作次数的最小值即可。

参考代码

#include<bits/stdc++.h>
using namespace std;
#define QwQ return 0;
int a[100010],n,sum1,sum2,pd;
int main()
{
	cin>>n;
	for(int i=0;i<n;i++)
		cin>>a[i];
	for(int i=1;i<n;i++)//首先考虑第一种情况
	{
		if(i%2==0)
		{
			if(a[i-1]>=a[i]&&pd==0)
				sum1++,pd=1;
			else
				pd=0;
		}
		else
		{
			if(a[i-1]<=a[i]&&pd==0)
	         	sum1++,pd=1;
			else//否则将pd设为0
				pd=0;
		}
	}
	pd=0;
	for(int i=1;i<n;i++)//然后再考虑第二种题目
	{
		if(i%2==1)//如果i为奇数,且a[i]>=a[i-1]那么sum2增加1,将pd设为 1
		{
			if(a[i-1]>=a[i]&&pd==0)
				sum2++,pd=1;
			else//否则将pd设为0
				pd=0;
		}
		else//如果i为偶数,且a[i]>=a[i-1]那么sum2增加1,将pd设为1
		{
			if(a[i-1]<=a[i]&&pd==0)
				sum2++,pd=1;
			else//否则将pd设为 0
				pd=0;
		}
	}
	cout<<min(sum1,sum2);//输出最小值
   QwQ;
}
posted @   wangmarui  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示