B Views Matter

                               B Views Matter
你来参加展览,一个展览引起了你的注意。它由nn个堆栈组成,其中第ii个堆栈由搁置在表面上的aiai块组成。

展品的高度等于mm。因此,每个堆叠中的块数小于或等于mm。

天花板上有一个摄像头,可以看到积木的顶视图,右侧墙上有一个摄像头,可以看到积木的侧视图。

找到可以删除的最大块数,以便两个摄像机的视图不会更改。

请注意,虽然最初所有的块都堆放在地板上,但是在移除一些块之后,它们不需要保持连接到地板。在整个展览中没有重力,所以即使下面的块被移除,也不会有任何块掉下来。也不允许手动移动块。
输入

å¨è¿éæå¥å¾çæè¿°
第一行包含两个整数nn和mm(1≤n≤100000,1≤m≤10的9次方) - 堆叠的数量和展品的高度。

第二行包含nn个整数a1,a2,...,ana1,a2,...,a(1≤ai≤m) - 每个堆栈中从左到右的块数。
输出
打印恰好一个整数 - 可以删除的最大块数。
示例
输入
5 6
3 3 3 3 3
输出
10
输入
3 5
1 2 4
输出
3
输入
5 5
2 3 1 4 4
输出
9
输入
1 1000
548
输出
0
输入
3 3
3 1 1
输出
1
译文:

乙重要意见
你来参加展览,一个展览引起了你的注意。它由NN个堆栈组成,其中第II个堆栈由搁置在表面上的艾艾块组成。

展品的高度等于毫米。因此,每个堆叠中的块数小于或等于毫米。

天花板上有一个摄像头,可以看到积木的顶视图,右侧墙上有一个摄像头,可以看到积木的侧视图。

找到可以删除的最大块数,以便两个摄像机的视图不会更改。

å¨è¿éæå¥å¾çæè¿°

请注意,虽然最初所有的块都堆放在地板上,但是在移除一些块之后,它们不需要保持连接到地板。在整个展览中没有重力,所以即使下面的块被移除,也不会有任何块掉下来。也不允许手动移动块。
输入
第一行包含两个整数nn和mm(1≤n≤100000,1≤m≤10的9次方) - 堆叠的数量和展品的高度。

第二行包含nn个整数a1,a2,...,ana1,a2,...,a(1≤ai≤m) - 每个堆栈中从左到右的块数。
产量
只打印一个整数 -可以删除的最大块数。
例子
输入
5 6
3 3 3 3 3
产量
10
输入
3 5
1 2 4
产量
3
输入
5 5
2 3 1 4 4
产量
9
输入
1 1000
548
产量
0
输入
3 3
3 1 1
产量
1
 

#include<stdio.h>
#include<stdlib.h>
int cmp(const void*a,const void*b)
{
	return *(int*)a-*(int*)b;//升序 
}
int main()
{
	int n,m,j,i,k;
	scanf("%d %d",&n,&m);
	int s[n],sum=0;
	for(i=0;i<n;i++)
	{
		scanf("%d",&s[i]);
		sum+=s[i];//总的块数 
	}
	qsort(s,n,sizeof(s[0]),cmp);//快速排序 
	int max=0,cnt=0;
	for(i=0;i<n-1;i++)//探寻前n-1块的最大值
	{
		if(max<s[i])
		{
			cnt++;
		} 
	} 
	int count=n-1;//前n-1列的保留数量;
	if(s[n-1]-cnt>1)
	{
		count+=s[n-1]-cnt;
	}
	else
	{
		cnt++;
	} 
	printf("%d\n",sum-cnt);
	return 0;
} 

这题吧:对我来说是思路的问题,还有一些数据的获取技巧......,关键是连向排序方向想的思想就没有.....

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值