Singing Everywhere

Singing Everywhere

注释:

n 1 2 3 4 5 6 7 8 9 10
an 2 1 4 7 4 8 3 6 4 7
bn 0 0 0 7 0 8 0 6 0

0

bn标记是“voice cracks”的数,其他值置为0,可以删除0,1,2个,用flag标记每次循环可以删掉的个数,ma标记可以删掉的最多的个数,然后分情况讨论:

1.bn中不为0的数,例如7:①如果an中7两边的数相等,则可以标记flag=1;②如果不相等,flag=0;

2.bn中为0并且两边的数不为0的0,例如7 0 8,①如果0两边的数相等,则标记flag=2;如果不相等,flag=1。

 

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
typedef long long LL;
LL a[100010],b[100010];
int main()
{
    int t,n;
    scanf("%d",&t);
    while(t--){
        int ma=0,sum=0,flag=0;
        fill(a,a+100010,0);
        fill(b,b+100010,0);
        scanf("%d",&n);
        for(int i=0;i<n;i++)
            scanf("%lld",&a[i]);
        for(int i=1;i<n-1;i++){
            if(a[i]>a[i-1]&&a[i]>a[i+1]){
                b[i]=a[i];
                sum++;
            }
        }
        for(int i=1;i<n;i++){
            if(b[i]==0){
                if(b[i+1]!=0&&b[i-1]!=0){
                    if(a[i-1]==a[i+1]){
                        flag=2;
                    }else{
                        flag=1;
                    }
                }
            }else{
                if(a[i-1]==a[i+1]){
                    flag=1;
                }
            }
            ma=max(ma,flag);
        }
        printf("%d\n",sum-ma);
    }
    return 0;
}

 

相关文章:

  • 2021-04-04
  • 2021-09-06
  • 2021-09-06
  • 2021-08-11
  • 2022-01-07
  • 2021-08-22
  • 2022-12-23
猜你喜欢
  • 2021-08-28
  • 2021-11-11
  • 2022-12-23
  • 2021-07-30
  • 2021-12-02
  • 2021-12-02
  • 2021-09-12
相关资源
相似解决方案