列表

详情


NC206573. 分水果

描述

小L老师老家的果园大丰收,于是乎小L老师准备拿一些水果来分配给同学们,但是由于苹果数量有限,小L老师
又想让每个同学都能得到苹果,然后成绩好的同学能分配到多一点的苹果。于是乎,小L老师制定了两个标准:
1.每个同学至少能分到一个苹果。
2.相邻的同学成绩高的分到的苹果数量更多。
聪明的你知道如何分配使得小L老师剩下的苹果数量更多嘛。

输入描述

第一行一个整数T(1≤T≤500),表示共有T组测试数据。
对于每组测试数据,第一行一个整数n(1≤n≤10000)表示有n个同学,第二行有n个ai(1≤ai≤10000)表示每名同学的成绩

输出描述

输出一个一个整数表示至少需要分配多少个苹果。

示例1

输入:

2
2
1 2
3
1 2 3

输出:

3
6

说明:

样例二 :第一名同学至少需要分配1个苹果
 第二名同学至少需要分配2个苹果
 第三名同学至少需要分配3个苹果
 所以一共至少需要分配6个苹果

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C(clang 3.9) 解法, 执行用时: 288ms, 内存消耗: 484K, 提交时间: 2020-06-07 13:41:18

#include<stdio.h>

int max(int a,int b){
	return a>b?a:b;
}

int main(){
	
	int T;
	scanf("%d",&T);
	int sum[505]={0};
	int i,t=T,idx=1;
	int n,a[10005],b[10005];
	while(t--){
		scanf("%d",&n);
		for(i=1;i<=n;i++){
			scanf("%d",&a[i]);
		}
		b[1]=1;
		for(i=2;i<=n;i++){
			if(a[i]>a[i-1]){
				b[i]=b[i-1]+1;
			}
			else{
				b[i]=1;
			}
		}
		
		for(i=n-1;i>=1;i--){
			if(a[i]>a[i+1]){
				b[i]=max(b[i],b[i+1]+1);
			}
		}
		for(i=1;i<=n;i++){
			sum[idx]+=b[i];
		}
		idx++;
	}
	for(i=1;i<=T;i++){
		printf("%d\n",sum[i]);
	}
	
	
	
}

C++14(g++5.4) 解法, 执行用时: 714ms, 内存消耗: 484K, 提交时间: 2020-06-08 09:12:05

#include<bits/stdc++.h>
using namespace std;
int a[10010],b[10010];
int main()
{
    int t,n,i;cin>>t;
    while(t--)
    {
        cin>>n;
        for(i=1;i<=n;i++)
            cin>>a[i],b[i]=1;
        for(i=2;i<=n;i++)
            if(a[i-1]<a[i])b[i]=b[i-1]+1;
        for(i=n;i>=2;i--)
            if(a[i-1]>a[i]&&b[i]+1>b[i-1])b[i-1]=b[i]+1;
        int s=0;
        for(i=1;i<=n;i++)
            s+=b[i];
        cout<<s<<endl;
    }
}

C++11(clang++ 3.9) 解法, 执行用时: 800ms, 内存消耗: 11512K, 提交时间: 2020-06-08 15:38:11

#include<bits/stdc++.h>
using namespace std;
int a[10010],b[10010];
int main()
{
	int t,n;
	cin>>t;
	while(t--)
	{
		int sum=0;
		cin>>n;
		for(int i=0;i<n;i++)
		{
			cin>>a[i];
			b[i]=1;
		}
		for(int i=n-1;i>=1;i--)
		if(a[i]<a[i-1])
		b[i-1]=b[i]+1;
		for(int i=0;i<n-1;i++)
		if(a[i]<a[i+1]&&b[i]+1>b[i+1])
		b[i+1]=b[i]+1;
		for(int i=0;i<n;i++)
		sum+=b[i];
		cout<<sum<<'\n';
	}
	return 0;
}

上一题