1 条题解
-
0
自动搬运
来自洛谷,原作者为

wmrqwq
会登顶的。搬运于
2025-08-24 22:46:48,当前版本为作者最后更新于2023-04-27 20:22:26,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
题目链接
题目简述
给定一个音高序列,输出最少要修改多少整数才能使这个序列成为交替鹡鸰鸟鸣的音高序列。
题意分析
操作后的音高序列总共有 种可能:
-
音量由高变低再由低变高;
-
音量由低变高再由高变低。
又因为大小范围是 ,因此将数组开大一点定义大小为 。
这样也需要考虑 种情况:
-
如果 为偶数,且 ,那么将对应的 增加 ,将 设为
true; -
如果 为奇数,且 ,那么将对应的 增加 ,将 设为
true,否则将 设为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; } -
- 1
信息
- ID
- 8660
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者