首页 > 其他分享 >2023.3.12 模拟赛题解

2023.3.12 模拟赛题解

时间:2023-03-12 14:37:00浏览次数:44  
标签:cnt 12 int 题解 top pop st 2023.3 max

天黑黑

题意

大致:给出含 \(\max\) 和 \(+\) 的表达式以及其中的 \(n\) 个数,求其最大值。

用前缀表达式的形式给出,X 表示一个要填的数,B 表示 \(\max\),A 表示 \(+\)。

题解

我们考虑把式子转移到树上。然后尝试找一找结论。

看了很久,发现其实我们只要最大化最终选的数个数就行,总有方案可以满足。证明不会,反正感觉很对。

具体实现也不难,首先一种是真的建树跑 dfs,节点是 \(\max\) 则为 \(V\gets\max(V_{lc},V_{rc})\);为 \(+\) 则是 \(V\gets V_{lc}+V_{rc}\)。

发现完全没必要,直接用栈实现一下就行。把原字符串倒过来搞成后缀表达式直接莽。

最后贪心一下,选最大的那些数。

小样例对的啊?写了个小数据对拍,没错就干脆不管了。

#include <stdio.h>
#include <assert.h>
#include <string.h>
template<class T=int,size_t maxn=10000>
class restack
{
private:
	size_t cnt;
	T q[maxn];
public:
	restack()
	{
		cnt=0;
	}
	inline T top()
	{
		if(cnt<1)
			assert(0);
		return q[cnt];
	}
	inline void push(const T &x)
	{
		if(cnt>=maxn)
			assert(0);
		q[++cnt]=x;
		return ;
	}
	inline T end()
	{
		return q[1];
	}
	inline void pop()
	{
		if(cnt<1)
			assert(0);
		--cnt;
		return ;
	}
	inline const bool empty()
	{
		return cnt==0;
	}
};
restack<int,200005> st;
char str[200005];
inline int max(int x,int y)
{
	return x>y?x:y;
}
#include <algorithm>
int len,i,ret,x,y,cntx,go;
int v[200005];
int main()
{
	scanf("%s",str+1);len=strlen(str+1);
	for(i=len;i>=1;--i)
	{
		if(str[i]=='X')
		{
			st.push(1);
			++cntx;
		}
		else if(str[i]=='A')
		{
			x=st.top();st.pop();
			y=st.top();st.pop();
			st.push(x+y);
		}else
		{
			x=st.top();st.pop();
			y=st.top();st.pop();
			st.push(max(x,y));
		}
	}
	for(i=1;i<=cntx;++i)
	{
		scanf("%d",v+i);
	}
	std::sort(v+1,v+cntx+1);
	go=st.end();
	for(i=cntx-go+1;i<=cntx;++i)
	{
		ret+=v[i];
	}
	printf("%lld",ret);
	return 0;
}

标签:cnt,12,int,题解,top,pop,st,2023.3,max
From: https://www.cnblogs.com/Syara/p/17208090.html

相关文章

  • 华为2018-8-12软件开发优招面试(C/C++)——上合地区
    下午2:00开始的,第一感受是:小姐姐超级多,第二感受是:超级热。话不多说,直接切入正题总共两面:一面是技术面(40min),一面是综合面(20min)技术面:总共的流程如下:1.自我介绍2.介绍一下项......
  • C/C++书籍借阅系统[2023-03-12]
    C/C++书籍借阅系统[2023-03-12]1.程序名称:书籍借阅系统2.课题来源:课程组自拟3.课题类型:综合型4.目的和意义:1)综合运用所学知识,解决实际问题2)全面提高学生的程序设计......
  • CF915E 题解(动态开点线段树)
    题目传送门简要题意:题面就挺简要的。看到题目第一眼想到线段树,再看一眼数据范围,\(1≤n≤10^9\),寄,既然不能直接用线段树,那怎么办呢?可以离散化,为了避免麻烦的离散化,......
  • P2782 友好城市题解
    题目传送门题意:给定一些上下的线段,求出最多不相交的线段数量。一开始看错题了,以为是给定一堆线段,求出线段最大不交数量,然后就写了一个树状数组优化\(dp\)结果样例都不过,......
  • CF1785D Range = √Sum 题解
    题目传送门(第一次CF场切绿欸)题意考虑将这段序列的平均数设为\(4n\),那么总和就会是\(4n^2\),这时候就需要让最值差等于\(2n\),直接让他等于\(3n\)和\(5n\)就可......
  • 【题解】CF1801G A task for substrings
    考虑拆开贡献,前缀贡献痕容易算。而跨越\([l-1,l]\)的贡献,考虑在正串ACAM找到\([1,l-1]\),反串ACAM找到\([l,r]\),那么要做的就是在两串的fail链祖先上,找到能凑成完......
  • 2020 年百度之星·程序设计大赛 · 官方题解汇总
    1、测试赛2、初赛一留个备份,方便以后找3、初赛二4、初赛三5、复赛......
  • 3.12周报
    本周总结去洛谷刷题,有act或者cf就去打比赛,得多刷题。大主题动态规划小专题刷了一下动态规划,dp的简单基础题。题目完成情况写了6道dp题,线性dp.......
  • P1149 [NOIP2008 提高组] 火柴棒等式 题解
    [NOIP2008提高组]火柴棒等式题目描述给你\(n\)根火柴棍,你可以拼出多少个形如\(A+B=C\)的等式?等式中的\(A\)、\(B\)、\(C\)是用火柴棍拼出的整数(若该数非零,则最高......
  • Nginx基础 - 12性能优化
     一、性能优化概述系统结构瓶颈:观察指标、压力测试了解业务模式:接口业务类型、系统层次化结构性能与安全:  性能好安全弱、安全好性能低 二、压力测试工具......