4 条题解
-
1
#include<bits/stdc++.h> using namespace std; int n,ans,sum; int main() { ans=0;//start cin>>n; int a=0; for (int i=0;i<=n;i++) { int b; cin>>b; if (a-b>0) { if (ans==0) { sum++; } ans=1;//下坡为1 } else if (a-b<0) { ans=0;//上坡为0 } a=b; } cout<<sum-1;//减去最后的 return 0; }
一种更加简便的算法。 思路:一个爬山的人,下山后又上山,说明此处为“低洼地”
我们记录状态ans,如果“下山”(1)后“上山”(0),说明此处为“低洼地” 最后,我们甚至不用数组就可以完成此题
tips:空间复杂度与时间复杂度应该都是最小的
-
0
每个点,枚举各种情况判断
#include<bits/stdc++.h> using namespace std; int a[10010]; int ans=0; int main(){ int n; cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } bool flat=false; for(int i=2;i<n;i++){ if(a[i]<a[i-1] && a[i]<a[i+1]){ ans++; flat=false; } if(a[i]>a[i-1]){ flat=false; } else if(a[i]==a[i-1]){ flat=true; } if(flat && a[i]<a[i+1]){ ans++; } } cout<<ans; return 0; }
- 1
信息
- ID
- 538
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 5
- 标签
- 递交数
- 398
- 已通过
- 138
- 上传者