本文共 695 字,大约阅读时间需要 2 分钟。
突破口:递增序列从前往后给糖,递减序列从后往前给糖,由于某个递增序列结尾与后面的递减序列的开头相同,这个时候发给这个同学的糖的数量就会有两个,为了满足要求,这时候要给两者之间最大的那个数量。
设置两个数组,分别记录递增与递减序列分发的糖数。
代码如下:#include#include #include #include using namespace std;typedef long long ll;const int maxn=1e+5;ll a[maxn],b[maxn],c[maxn];int main(){ int T,n,i,j; ll sum; cin>>T; while(T--) { cin>>n; for(i=0;i<=n-1;i++) cin>>a[i]; memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); sum=0; for(i=1;i<=n-1;i++) if(a[i]>a[i-1]) b[i]=b[i-1]+1; else if(a[i]==a[i-1]) b[i]=b[i-1]; for(i=n-2;i>=0;i--) if(a[i]>a[i+1]) c[i]=c[i+1]+1; else if(a[i]==a[i+1]) c[i]=c[i+1]; /* for(i=0;i<=n-1;i++) cout< <<' ';cout<
转载地址:http://nddci.baihongyu.com/