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

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

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

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

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

B Views Matter
第一行包含两个整数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个堆栈由搁置在表面上的艾艾块组成。

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

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

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

B Views Matter

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

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

相关文章:

  • 2021-11-04
  • 2022-12-23
  • 2021-09-18
  • 2021-10-12
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-09-06
  • 2022-12-23
  • 2022-12-23
  • 2021-11-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-08
相关资源
相似解决方案