P9253题解
题目链接
P9253 [PA 2022] Ornitolog 2
题目简述
给定一个音高序列,输出最少要修改多少整数才能使这个序列成为交替鹡鸰鸟鸣的音高序列。
题意分析
操作后的音高序列总共有
-
音量由高变低再由低变高;
-
音量由低变高再由高变低。
又因为大小范围是
这样也需要考虑
-
如果
i 为偶数,且a_{i-1} \le a_{i} ,那么将对应的sum 增加1 ,将pd 设为true; -
如果
i 为奇数,且a_{i-1} \le a_{i} ,那么将对应的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;
}