202109-1 数组推导
样例1输入
6
0 0 5 5 10 10
样例1输出
30
15
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int b[n];
for(int i=0;i<n;i++){
cin>>b[i];
}
int min=b[0],max=b[0];
for(int i=1;i<n;i++){
if(b[i]!=b[i-1]){
min+=b[i];
max+=b[i];
}else{
max+=b[i];
}
}
cout << max << endl;
cout << min << endl;
return 0;
}
202109-2 非零段划分(优化)
双重for循环肯定会超时
#include<iostream>
#include<stack>
#include<algorithm>
#include<string>
#include<map>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n];
int max=0;
for(int i=0;i<n;i++){
cin>>a[i];
if(a[i]>max) max=a[i];
}
int maxCount=0;
int temp;
for(int p=1;p<=max;p++){
temp=0;
for(int i=0;i<n;i++){
if(a[i]<p) a[i]=0;
}
for(int i=0;i<n;i++){
if(a[i]!=0){
//是不是第一个数或前面一个树为0
if(i==0||a[i-1]==0){
temp++;
}
}
}
if(temp>maxCount) maxCount=temp;
}
cout<<maxCount;
return 0;
}