如果循环里面只一次,最后两个测试点会超时,但是暴力的加成三次,就可以过了^v^
#include<bits/stdc++.h>
using namespace std;
int main(){
int a;
cin>>a;
int b[a+3]={};
for(int i=0;i<a;i++)
cin>>b[i];
int k1=1,k2=0,all=0;
int o=0;
while(k1!=0){
int p1=0,p2=-1;//记录长度和初始坐标
if(o==0){//判断是否需要重新找出最长
o=1;
k1=0;k2=0;//储存最长长度和初始坐标
for(int i=0;i<a;i++){
if(b[i]!=0){
p1++;
if(p2==-1)p2=i;
}
if(b[i]==0){
if(p1>k1){
k1=p1;k2=p2;
}
p1=0;p2=-1;
}//第一次
i++;
if(b[i]!=0){
p1++;
if(p2==-1)p2=i;
}
if(b[i]==0){
if(p1>k1){
k1=p1;k2=p2;
}
p1=0;p2=-1;
}//第二次
i++;
if(b[i]!=0){
p1++;
if(p2==-1)p2=i;
}
if(b[i]==0){
if(p1>k1){
k1=p1;k2=p2;
}
p1=0;p2=-1;
}//第三次
}
if(p1>k1){
k1=p1;
k2=p2;
}
}
for(int i=k2;i<(k2+k1);i++){
b[i]--;
if(b[i]==0)o=0;//当前最长是否被破坏
}
if(k1!=0)
all++;
}
cout<<all;
}