ZOJ——4107 Singing Everywhere(思维好题)
原题链接: https://zoj.pintia.cn/problem-sets/91827364500/problems/91827370502
测试样例:
Sample Input
3
6
1 1 4 5 1 4
7
1 9 1 9 8 1 0
10
2 1 4 7 4 8 3 6 4 7
Sample Output
1
0
2
样例解释:
对于第一个示例测试用例,BaoBao不需要删除音符。因为如果他不删除任何音符,他会唱1个语音裂纹(第4个音符),并且无论他删除哪个音符,他也将总是唱1个声音裂纹。
对于第二个示例测试用例,BaoBao可以删除第三个音符,并且不会进行声音破解。好极了!
对于第三个示例测试用例,BaoBao可以删除第四个音符,以便仅执行2个语音破解(4 8 3和3 6 4)。
题意: 给你一个整数序列音符,你有一次删除音符的机会,问你语音裂缝的最低次数是多少?
解题思路: 我们先要判断就是我们删除音符应该怎么删?目的是什么?我们是为了减少语音裂缝,那么我们就想要尽可能多减少,只有一次机会,我们对情况进行判断即可,即如果两个语音裂缝相邻,我们看操作图:
那么对于只有一个峰的时候,我们也同样要考虑周边的影响,我们具体看图:
那么针对这两种特殊情况,我们都需要考虑,除了这两种情况,其他的语音裂缝都能消掉,我们只要遍历一遍序列统计语音裂缝数量,再遍历一遍判断我们是否能消掉最大的次数,注意如果我们能消掉两个就直接退出,因为这就是最大的解了。具体看代码。
AC代码:
/*
*邮箱:unique_powerhouse@qq.com
*blog:https://me.csdn.net/hzf0701
*注:文章若有任何问题请私信我或评论区留言,谢谢支持。
*
*/
#include<bits/stdc++.h> //POJ不支持
#define rep(i,a,n) for (int i=a;i<=n;i++)//i为循环变量,a为初始值,n为界限值,递增
#define per(i,a,n) for (int i=a;i>=n;i--)//i为循环变量, a为初始值,n为界限值,递减。
#define pb push_back
#define IOS ios::sync_with_stdio(false);cin.tie(0); cout.tie(0)
#define fi first
#define se second
#define mp make_pair
using namespace std;
const int inf = 0x3f3f3f3f;//无穷大
const int maxn = 1e5+2;//最大值。
typedef long long ll;
typedef long double ld;
typedef pair<ll, ll> pll;
typedef pair<int, int> pii;
//*******************************分割线,以上为自定义代码模板***************************************//
int t,n,a[maxn];//t组测试样例,n为歌曲长度。
int main(){
//freopen("in.txt", "r", stdin);//提交的时候要注释掉
IOS;
while(cin>>t){
while(t--){
cin>>n;
rep(i,1,n)cin>>a[i];
int cnt=0;//统计峰数
int flag=0;//判断我们要减少几个。
rep(i,2,n-1){
if(a[i]>a[i-1]&&a[i]>a[i+1]){
cnt++;//记录原数组中有几个峰
if(i+3<=n&&a[i+2]>a[i+1]&&a[i+2]>a[i+3]){ //i+3<=n是避免越界,因为我们要考虑到i+3
flag=1;
if(a[i]==a[i+2]){
flag++;//这里如果两个山峰顶都相等,我们可以删除a[i+1]达到删除最大。
break;//已经到达最大,直接退出即可。
}
}
else if(i>=3&&a[i-1]>a[i+1]&&a[i-1]>a[i-2]){
flag=max(flag,0);//这里我们删除峰顶仍然会有一个峰产生。
}
else
flag=max(flag,1);
}
}
//经过遍历之后我们就可以得到我们最多可以删除的峰顶flag。
cout<<cnt-flag<<endl;
}
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!