首页 > 其他分享 >P8683题解

P8683题解

时间:2024-02-14 13:44:26浏览次数:22  
标签:P8683 括号 int 题解 long 后缀 减去 表达式

首先,看题目描述,给定 N 个加号,与 M 个减号,要你求后缀表达式最大值,实际上就是求这些符号和数字排列起来的最大值。

这题很容易让人想到贪心。但是呢,又怎么个贪心法呢?很容易看出来,我们可以先用 sort 进行这么一个排序,之后,我们对于前 N 大的数加起来,对于剩下的数就减去,于是代码大体就出来了。

你以为完了?不!错掉 7 个测试点告诉我们一定要看数据范围,在转换后缀表达式为中缀表达式时,有可能有括号!所以,按上面我们讲的那样去做就会出错。

怎么办呢?我们可以使用 abs 函数消除括号影响。

至于后缀表达式可以参考这篇文章:https://blog.csdn.net/kexuanxiu1163/article/details/90629494

这里解释下为什么用这个函数:首先,请先看完上面推的那篇文章。

之后,我们可以知道的是,在转换后缀为中缀表达式时有一个很烦问题就是有可能有括号,这意味着什么?这意味着加减乘除先后顺序可能改变,同时,题目中给定范围有可能为负数,所以,有可能原本正确的是减去 1 加上 2 去得出值,按那个做法就可能变为了减去 1 再减 2 这显然是错误的,所以就需要使用 abs 那个函数消除此类影响。

还是那个例子,你想,我现在减去了 1 之后呢又因为 2 在括号里 2 带了个负号,那这求出正确值不就直接去掉负号也就是直接求绝对值就完了吗?

所以,这就是为什么要用这个函数对这些数做这么一个处理的原因。

最后,代码:

#include<bits/stdc++.h>
using namespace std;
long long int n,m,l;
const int N=2*1e6;
long long int a[N];
long long int s=0;
int cmp(int x,int y){
	return x>y;
}
int main(){
	scanf("%lld%lld",&n,&m);
	l=n+m+1;
	for(int i=1;i<=l;i++){
		scanf("%lld",&a[i]);
	}
	sort(a+1,a+l+1,cmp);
	if(m==0){
		for(int i=1;i<=l;i++){
			s+=a[i];
		}
	}else{
	    s=s+a[1];
		s=s-a[l];
		for(int i=2;i<=l-1;i++){
			s=s+abs(a[i]);
		}
	}
	
	printf("%lld",s);
	
	return 0;
}

抄是会被棕名的!

转自本人洛谷博客,原文章时间为2023-07-17 11:48:17

标签:P8683,括号,int,题解,long,后缀,减去,表达式
From: https://www.cnblogs.com/solev/p/18015163

相关文章

  • 麦肯锡问题解决流程-为希望提升水平的产品经理量身定制
    您是否想知道世界上最成功的产品经理如何始终如一地提供不仅满足而且超出预期的解决方案?秘密可能就在于世界上最负盛名的咨询公司之一麦肯锡公司所磨练的方法论。本文深入探讨了麦肯锡的问题解决流程,该流程专为希望提升水平的产品经理量身定制。01.麦肯锡方法:产品管理风......
  • SP34020 ADAPET - Ada and Pet 题解
    题目传送门前置知识前缀函数与KMP算法解法经检验样例,我们发现\(|S|k\)并不是最优答案。考虑利用luoguP4391[BOI2009]RadioTransmission无线传输结论的逆命题,首先必须要有一个完整的\(S\),然后将\(|S|-next_{S}\)复制\(k-1\)次即可。故\(|S|+(|S|-next_{|S|}......
  • P5350 序列 题解
    题目链接:P5350序列比较不难的可持久化文艺平衡树?有道弱化版:数组操作不过弱化版没有随机数据,很显然ODT会直接被卡,这题数据随机倒是能用ODT做一下,而且码量也比较小,可以自己写写,或者参照我给的弱化版我给了这题部分操作的ODT写法。我们还是来讲最实用的可持久化文艺平衡树......
  • UVA12467 Secret Word 题解
    题目传送门前置知识前缀函数与KMP算法解法考虑将\(S\)翻转后得到\(S'\),然后就转化为求\(S'\)的一个最长子串使得其是\(S\)的前缀。使用KMP求解即可。代码#include<bits/stdc++.h>usingnamespacestd;#definelllonglong#defineullunsignedlonglong#d......
  • WGOI R1 真夏飞焰 题解.18014664
    【题目大意】给定序列\(a\),我们定义序列\(a,b\)是「\(k\)相似」的,当且仅当对于\(a\)中每一个四元组\((l_1,r_1,l_2,r_2)\),若满足\(r_1-l_1+1=r_2-l_2+1\lek,l_2=r_1+1,a_{l_1\ldotsr_1}=a_{l_2\ldotsr_2}\),则有\(b_{l_1\ldotsr_1}=b_{l_2\ldot......
  • CF609D题解
    Gadgetsfordollarsandpounds题目传送门题解给一个单\(\log\)题解。“求最早完成买\(k\)样东西的天数。”——很明显的二分答案。在检验函数中,我们应当把前\(k\)小的物品费用之和与总金额作比较,其它题解大多使用直接排序的方法,于是就多了一只\(\log\)。其实没有必......
  • P4559 [JSOI2018] 列队 题解
    题目链接:列队半年前mark的题,结果现在一下子就会做了。顺便写写我的手玩过程和复杂度说明。考虑比较特殊的情况:比较特殊的,发现从黑色到红色区间我们无论咋选择,由于\(\left|a_{right}-a_{left}\right|\),这玩意如果\(right\)表示红色的一边,那么这个绝对值可以直接拆掉,那么......
  • [ARC171E] Rookhopper's Tour 题解
    题目链接首先把\(m=2\)和\(m\)为奇数的情况判掉,由于我们要对合法的摆放方案计数,而一个摆放方案要判断合法性就必须通过一组合法的移动过程,对移动的状态进行记录以此转移和优化显然没啥前途,因此我们考虑摆放方案和移动过程之间的联系。一个比较显然的观察是摆放方案和移动过......
  • 2024牛客寒假算法基础集训营2个人补题题解(K、D)
    比赛链接:2024牛客寒假算法基础集训营2K、TokitsukazeandPassword(easy)题面看着很难实际上只要暴力的东西,赛时看了眼题面就溜了血亏爆搜,枚举\(abcd\)和_可能的值,枚举的情况只有\(9*8*7*6*9=27216\)种。判断按照枚举出的对应值排列出的密码是否满足条件,满足就\(ans++\)写完......
  • Atcoder Educational DP Contest 题解
    比赛链接:Atcoderr或者题单A:Frog1常规线性dp,注意到对于每个落点来说,青蛙只能由第\(i-1\)个石头或者第\(i-2\)个石头转移得到,那么我们让\(dp[i]\)为当跳到第\(i\)个石头上的最小费用。此时显然有:\[dp_i=\min(dp_{i-1}+\left|h_i-h_{i-1}\right|,dp_{i-2}+\left|h_......