第十届蓝桥杯 C/C++ B组 I-后缀表达式

第十届蓝桥杯 C/C++ B组 I-后缀表达式

文章目录

  • 第十届蓝桥杯 C/C++ B组 I-后缀表达式
        • 关于bits/stdc++.h
        • 关于sort()函数

第十届蓝桥杯 C/C++ B组 I-后缀表达式_第1张图片

例1:
1 1
1 2 3
---------------
3 1 + 2 -
3 + 2- 1 = 4

起初想法:
将所有的数字排序,分成(N+1)个较大的数M个较小的数

最后的结果是 sum = (N+1)个较大的数 - M个较小的数
但是

例2:
0 2
1 2 3
--------------
3 2 - 1 -
3 - 2 -1 = 0
???
3-(1-2) = 4
3 1 2 - -

代码如下(来源:https://blog.csdn.net/lytwy123/article/details/88826385):

#include 
using namespace std;

typedef long long LL;
const int maxn = 200010;

int n, m;
int a[maxn];

int main()
{
    scanf("%d%d", &n, &m);
    int k = n + m + 1;
    LL sum = 0;
    for (int i = 0; i < k; i++)
    {
        scanf("%d", &a[i]);
        sum += a[i];	//求这些数的和 
    }
    sort(a, a + k);

    if (a[0] >= 0)
    // 第一个数大于0,说明没有负数,因为之前加过一次a[0],然后我们本来就需要减掉a[0],所以减掉2*a[0] 
    {
        if (m) sum -= 2 * a[0];
    }
    else // 如果是负数的那么我们需要加上,因为之前是负数,加上去也就相当于减掉,所以-=2*a[i](a[i]<0) 
    {
        for (int i = 0; i < k && a[i] < 0 && m > 0; i++ )
        {
            sum -= a[i] * 2;
            m-- ;
        }
    }
    cout << sum << endl;
    return 0;
}

其中:

if (a[0] >= 0)
    // 第一个数大于0,说明没有负数,因为之前加过一次a[0],然后我们本来就需要减掉a[0],所以减掉2*a[0] 
    {
        if (m) sum -= 2 * a[0];
    }
    else // 如果是负数的那么我们需要加上,因为之前是负数,加上去也就相当于减掉,所以-=2*a[i](a[i]<0) 
    {
        for (int i = 0; i < k && a[i] < 0 && m > 0; i++ )
        {
            sum -= a[i] * 2;
            m-- ;
        }
    }

关于bits/stdc++.h

#include

#include  
//这个头文件包含以下等等C++中包含的所有头文件:
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include 
.......

关于sort()函数

#include
#include // sort函数包含在头文件为 #include 的c++标准库中
using namespace std;
int main()
{
 int a[10]={9,6,3,8,5,2,7,4,1,0};
 sort(a,a+10); 					// 从小到大排序
 sort(a,a+10,greater<int>());	// 从大到小排序
 sort(a,a+10,less<int>());		// 从小到大排序
    
 for(int i=0;i<10;i++)
 	cout<<a[i]<<endl;
 return 0;
}

sort函数有三个参数:
(1)第一个是要排序的数组的起始地址。
(2)第二个是结束的地址(最后一位要排序的地址)
(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序,其中:
less<数据类型>() //从小到大排序
greater<数据类型>() //从大到小排序

你可能感兴趣的:(第十届蓝桥杯 C/C++ B组 I-后缀表达式)