样例全过wa ,求助
查看原帖
样例全过wa ,求助
707908
y1441206楼主2024/8/17 22:01
#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;

int rex[4] = {0,0,1,2} ;

inline void solve(){
    int n ; cin >> n ;
    vector<int> a(n+1) ;
    for(int i=1;i<=n;i++) cin >> a[i] ;
    if(n<=3) {
        cout << rex[n] << endl ;
        return  ;
    }
    int ans = 0 ;
    // 设d1  , d2 为 两个等差数列公差 , 且d1<=d2
    // 1 . d1 = 1 , d2 = 1 , 值域分成两半 
    int mi = a[1] , ma = a[1] ;
    for(int i=1;i<n;i++){
        mi = min(mi,a[i]) ;  ma = max(ma,a[i]) ;
        if(ma == i) ans ++ ;
        if(mi == n-i+1) ans ++ ;
    } 
    // 2. d1 = 1, d2 != 1, 值域分成两半 -> 肯定不重复
    int x = min(a[1],a[2]) , y = max(a[1],a[2]) ; 
    if(x==1&&y==n) ans ++ ;
    x = min(a[n-1],a[n]) ; y = max(a[n-1],a[n-2]) ;
    if(x==1&&y==n) ans ++ ;
    // d1 = 2 , d2 = 2
    int t = 1 ;
    for(int i=2;i<=n;i++){
        if(a[i]%2==a[1]%2) t ++;
        else break ;
    }
    if(t==n/2||t==n/2+1) ans ++ ;
    cout << ans << endl ;
}

signed main(){
    IOS
    int _ = 1;
    cin >> _;
    while(_ --) solve();
    return 0;
}


2024/8/17 22:01
加载中...