听思维的一道题,网上大多直接模拟,感觉有点麻烦,其实只要把连续段求出来,然后处理一下统计答案就行
两个注意点:1.除了第一个连续段,其余段长度都要+1
2.因为目的地是0,所以最后一段要特判一下
#include<bits/stdc++.h> using namespace std; #define N 200005 int n,p[N],h; vector<int>v; int main(){ int q;cin>>q; while(q--){ v.clear(); cin>>h>>n; int len=0; for(int i=1;i<=n;i++){ cin>>p[i]; if(i==1 || p[i]+1==p[i-1]) len++; else { if(v.size()!=0)len++; v.push_back(len); len=1; } } int ans=0; if(p[n]>=2){ if(v.size())len++; if(len%2==0)ans++; } for(auto len:v){ if(len%2==0)ans++; } cout<<ans<<'\n'; } }