1. 程式人生 > 其它 >CF1467B Hills And Valleys

CF1467B Hills And Valleys

因為只能修改一次

且每點的修改只能對左右產生影響

畫出所有的折線情況

發現貢獻只能是3 ,或者1

如果滿足-3就-3,否則-1;

但一直wa,又找不著該邏輯的毛病,先放著發酵一會

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6;
int a[maxn],ok[maxn];
int main( )
{
    
//    freopen("lys.in","r",stdin);
    
    int t;
    cin>>t;
    for(int i=1;i<=t;i++)
    {
        
int n; cin>>n; for(int j=1;j<=n;j++) { cin>>a[j]; } if(n==1||n==2) { cout<<0<<endl; continue; } int cnt=0; for(int j=2;j<=n-1;j++) {
if((a[j]>a[j-1]&&a[j]>a[j+1])||(a[j]<a[j-1]&&a[j]<a[j+1])) { ok[j]=1; cnt++; } } for(int j=0;j<=n+10;j++) { a[j]=0; } int a=0; for
(int j=2;j<=n-1;j++) {int p=ok[j]+ok[j+1]+ok[j-1]; if(p==3) { a=1; } } if(a==1) { printf("%d\n",cnt-3); } else { if(cnt>=1) { printf("%d\n",cnt-1); } else { printf("%d\n",cnt); } } for(int j=0;j<=n+10;j++) { ok[j]=0; } } }