题目
思路来源
乱搞ac
题解
一个单独的串里的前缀最小值x,前缀和为y
先选x>0 y>0的,选完之后选x<0 y>0的,先选x绝对值小的后大的,
然后选x<0 y<0的,顺序不太显然,但是可以考虑比较法决定哪个在前,
比如,
4
(((
))()))((
)
(3,3)
(-2,-1)
(-3,-1)
(-1,-1)
考虑第二个串和第三个串的顺序时,手玩发现,
当min(a.fi,a.se+b.fi)>min(b.fi,b.se+a.fi),a在前
然后按这个排序一下就过了,其实打开min符号的话,可以发现是良序的,
这个等价于a.se+b.fi>b.se+a.fi,即a.se-a.fi>b.se-b.fi
前缀和-前缀最小值大的在前面
代码
#include<iostream>
#include<cstdio>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
typedef long long ll;
typedef double db;
typedef pair<int,int> P;
#define fi first
#define se second
#define pb push_back
#define dbg(x) cerr&
优化算法:处理字符串前缀和与最小值的排序问题

文章介绍了如何解决一个编程问题,涉及计算字符串中每个子串的前缀和与最小值,并根据特定规则对这些子串进行排序。作者提供了C++代码实现,包括对数据结构和算法的优化,以达到高效的AC解决方案。
最低0.47元/天 解锁文章
986

被折叠的 条评论
为什么被折叠?



