Codeforces Round #710 (Div. 3) G. Maximize the Remaining String

DNF单机版搭建全攻略:从零开始到局域网联机(含常见问题解决) 本文提供详细的DNF单机版搭建指南,从环境配置到局域网联机设置,涵盖服务端安装、数据库配置及常见问题解决方案。适合新手和有经验的玩家,帮助快速搭建专属游戏服务器,重温经典游戏体验。 阅读详情

原题链接
题意:t组数据,每组给一个由小写字母组成的字符串,将每个出现过的字母删减至只剩一个,输出删减后字典序最大的字符串。

该说不说,这场div3的官方题解就写的就nm离谱,明明有更好理解复杂度更低的解法,硬是要放最难理解复杂度最高的解法,无语惹。

思路:用vector存一下每个字母的下标,然后从z到a遍历,二分查找一下当前字母(比如是z)最贪心的位置,再判断一下比z小的字母下标中最后一个下标是否比这个位置小,如果存在就说明z不行,会有比z小的字母无论怎么删减也会在z前面,大概就是这个意思,细节还是看代码吧。

#include<bits/stdc++.h>
#define LL long long
#define INF 0x3f3f3f3f
#define MOD 1000000007
#define stree SegTree[root]
#define lson SegTree[root << 1]
#define rson SegTree[root << 1 | 1]
using namespace std;
const int N = 200005;
char s[N];
bool vis[30];
int main()
{
    int t;
    cin>>t;
    while (t--)
    {
        cin>>s;
        int n = strlen(s);
        vector<int> v[30];
        for (int i = 0;i < n;i++)
        {
            v[s[i]-'a'].emplace_back(i);
        }
        int m = 0;
        for (int i = 0;i < 26;i++)
        {
            vis[i] = 0;
            if(!v[i].empty()) m++;
        }
        int tem = 0;
        for (int i = 0;i < m;i++)
        {
            for (int j = 25;j >= 0;j--)
            {
                if (v[j].empty() || vis[j]) continue;
                bool fla = 1;
                int pos = *lower_bound(v[j].begin(), v[j].end(), tem);
                //printf("j = %d, pos = %d\n",j, pos);
                for (int k = 0;k < j;k++)
                {
                    if (v[k].empty() || vis[k] || j==k) continue;
                    if (v[k].back() < pos)
                    {
                        fla = 0;
                        break;
                    }
                }
                if(fla)
                {
                    printf("%c", j+'a');
                    tem = pos;
                    vis[j] = 1;
                    break;
                }
            }
        }
        printf("\n");
    }
    return 0;
}

易灵思Trion FPGA实战:5分钟搞定MIPI硬核配置(附Interface Designer避坑指南) 本文详细介绍了易灵思Trion FPGA中MIPI硬核的快速配置方法,通过Interface Designer工具实现从时钟配置到数据收发的全流程实战。特别针对初次接触Trion系列的设计师,提供了六个关键配置陷阱及解决方案,帮助开发者高效完成嵌入式视觉和高速数据传输项目。 阅读详情

相关推荐

告别‘抓瞎’:CANoe的Trace、Graphics和Logging窗口实战技巧,高效分析总线故障

本文深入解析CANoe的Trace、Graphics和Logging窗口实战技巧,帮助工程师高效分析总线故障。通过智能过滤、可视化监控和智能日志管理,构建系统级问题定位工作流,显著提升车载网络故障排查效率。

weixin_42709044的博客 294

Codeforces G. Maximize the Remaining String (单调栈&字符串子序列) (Round #710 Div.3)

传送门 题意:给你一个长度为n的全由小写字母组成的字符串,要求你保持原序列顺序的前提下去重得到字典序最大的子序列。 思路: 思路其实很清晰,就是在能让大的字符靠前且自身还能在后面出现的情况下先输出较大的字符。 赛中代码基本框架没啥问题,但是万万忘了单调栈这个好东西呀!呜呜呜嗝~ 后面才知道这是个牛客原题,嗐,太垃圾了,人菜还不喜欢刷题,代码如下,具体思路见原题代码注释。 C++代码实现: #include<bits/stdc++.h> #define endl '\n' #def

Satur9的博客 322

关于小样本学习综述论文的总结

对小样本学习综述的个人总结

qq_46176086的博客 5457

G. Maximize the Remaining String(思维+暴力枚举/单调栈优化)

https://codeforces.com/contest/1506/problem/G 题意: 给出一个长度为n的只包含小写字母的字符串要删掉其中的所有重复字符(每个字符必须留一个),使留下来的字符串字典序最大,输出留下的字符串。 n≤2×10^5 思路: 能暴力就先思考暴力。 我们发现答案最多是长度为26的。于是先统计不同种类字母个数,答案长度就是其size。 然后对于答案的每一位,我们可以O(26)枚举每一个字符。然后考虑,当前字符如果选了,后面的不同字符的种类个数够不够。够的话就选。.

代码笔记本 578

小红书x-mini签名逆向实战:Frida动态Hook与算法还原

在移动App协议分析中,请求签名机制是保障接口安全的核心技术,其本质是客户端对请求参数、时间戳、设备指纹等要素进行加密认证的过程。理解签名原理需掌握Native层加密流程、JNI调用机制及密钥动态派生逻辑。Frida作为主流动态插桩工具,能绕过符号剥离、字符串加密和控制流混淆等反分析手段,在函数执行瞬间捕获寄存器状态、内存数据与调用上下文,实现签名算法的完整还原。该技术广泛应用于合规内容监测、API自动化调用与竞品协议研究等工程场景。本文聚焦小红书x-mini签名这一典型样本,详解从JNI_OnLoad定位

weixin_31264565的博客 461

浙大数值分析lab2

最可怕的一道题,题目是这样的 Root of a Polynomial A polynomial of degree nnn has the common form as p(x)=cnxn+cn−1xn−1+⋯+c1x+c0p(x)=c_n x^n + c_{n-1} x^{n-1} + \cdots + c_1 x + c_0p(x)=c​n​​x​n​​+c​n−1​​x​

yao_zou的博客 4797

G - Maximize the Remaining String (思维,贪心)

题意 给你一个字符串,要求你把每个字母出现次数多于1的字母删除到只剩一次,问最后留下的字符串字典序最大是什么。 思路 我们看到这个题可以先思考一下,我们如果想让最后得到的字符串字典序最大,那肯定要按字母从大到小的枚举,就比如字符串bzbz,如果要想字符串最大,那肯定要让大的字母尽量在前面,所以我们应该先删除第一个z前面的b。 我们可以算出我们最后得到的字符串的长度,我们刚开始找一个空字符串,然后就根据原字符串来给这个字符串添字母,最后得到的字符串就是原字符串删完以后剩下的最大字符串。 我们进行模拟的思路就是

qq_45719639的博客 392

KIBANA可视化管理界面说明

更说明转自https://blog.csdn.net/IT_ZRS/article/details/125496588 1 主要结构功能 使用浏览器访问 ip:5601 默认端口,进入首页 Discover:日志管理视图 主要进行搜索和查询 Visualize:统计视图 构建可视化的图表 Dashboard:仪表视图 将构建的图表组合形成图表盘 Timelion:时间轴视图 随着时间流逝的数据 APM:性能管理视图 应用程序的性能管理系统 Canvas:大屏展示

tian830937的专栏 7086

Codeforces Round #710 (Div. 3) G. Maximize the Remaining String(单调栈、模拟)

有以下事实: 当后一个字符比前一个字符大,并且前一个字符后面还有出现,则删除之 如果这个字符是这种字符出现的最后一个位置,则加入,并在之后不能删除 同种字符只能在答案出现一次 #include<bits/stdc++.h> using namespace std; const int N=1e4+10; int main(){ string s; int t; cin>>t; while(t--){ cin>>s; map<char,i..

菱形继承 261

YOLOv8改进 | 融合篇,YOLOv8改进主干网络为MobileNetV3+CA注意机制+添加小目标检测层(全网独家首发,实现极限涨点)

小目标检测难点众多,导致很多算法对小目标的检测效果远不如大中型目标。影响算法性能的主要原因如下:第一,小目标分辨率低、信息量不足,导致神经网络提取到的有效特征较少。第二,小目标在图像中所占的区域较小,易受背景干扰,这对算法的定位性能要求较高。第三,小物体标注困难,训练数据有限,导致模型泛化能力差。例如多尺度学习、无锚机制和生成对抗学习等方法,都能提高小目标检测的准确性和鲁棒性。为了改善小目标漏检现象严重的问题,我在 YOLOv8 中增加了 P2 检测头,相当于有四个检测头,使网络能检测到更小的目标。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2858

百度百科 X-Bk-Token 算法还原

百度百科 X-Bk-Token 算法还原

自成背后的博客 1万+

Codeforces 1506G Maximize the Remaining String 思维

题意:给出一个字符串,删掉其中某些出现了大于等于两次的字符,并最大化每一个字符只出现一次的字符串 思路:从一个空串开始添加字符。因为要求的是最大字符串,因此我们最大化每一次添加的字符。但是什么样的字符是能够添加的呢? 答案是这个字符第一个出现的位置的后面包含了所有剩余的字符,否则添加了这个字符可能会使某些字符无法添加。 #include <bits/stdc++.h> using namespace std; #define BUFF ios::sync_with_stdio(false), c

葉子曦 274

【示波器专题】示波器探头的原理深入——有源探头之单端有源探头

由于接地环路的苛刻要求,更高带宽的单端有源探头就算设计了也不实用。因此单端有源探头的带宽一般在6GHz以内,更高带宽的信号测量也只能使用差分有源探头(市面上有些型号的差分探头可同时兼顾单端测试)。......

一点硬件 2146

Codeforces Round #710 (Div. 3) G. Maximize the Remaining String 单调栈

原题链接:https://codeforces.ml/contest/1506/problem/G 目录题意分析Code 题意 有一个字符串,你可以删掉一些字符,要求最开始每个字符都至少剩一个且字典序最大 分析 首先满足单调性,其次要求每个字符都剩至少一个,可以用单调栈解决,记录后面还剩几个该字符,如果没有,就留下,如果还有,就可以被替换 Code #include <iostream> #include <cstdio> #include <cstring> #incl

kaka03200的博客 166

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Codeforces Round #710 (Div. 3) G. Maximize the Remaining String【单调队列、单调栈】

Link 题意 给定一个字符串,选出一些字符形成新的字符串,使每个字符均只出现一次,要使新字符串字典序尽可能大,求该字符串

while_you的博客 160

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Codeforces Round #710 (Div. 3)

A - Strange Table 思路 这个就是根据第一个矩阵来求出这个点的横坐标和纵坐标。 我当时推的就是 l=xl=x%nl=x r=(x−l)/n+1r=(x-l)/n+1r=(x−l)/n+1 这个点x的坐标就是(l,r)。 然后根据第二个矩阵的性质求出最终结果。 代码 #include <bits/stdc++.h> #define ll long long #define fi first #define se second #define pb push_back #define

qq_45719639的博客 311

Codeforces Round #710 (Div. 3) E. Restoring the Permutation

题意: 有一个全排列ppp, 现给出这个全排列每个位置的前缀最大值,求字典序最小和字典序最大的全排列ppp。 题解: 求字典序最小,还是比较好求的,只要每次取当前还未被放入的最小的数即可。 求字典序最大,不能像之前那样,会超时,此时我们考虑设一个数组,dp[i]dp[i]dp[i] 表示小于 iii 的最大的还未被放的数, 但这里有一个细节,我们只能去更新那些确定的数,比如 555 555 555 555 666 666,可以确定第111为555,第555个为666,我们只能更新dp[5]dp[5]dp[5

the best 的博客 354

Maximize the Remaining String

cf题目链接 题意:给你一个字符串,问对所有重复字符删除至只剩一个后得到的字典序最大的字符串是什么 解析:简单的模拟,要使字典序最大,那么我们就要使前面的字符最大,要使大字符提前,那我们就需要尽量删去大字符之前的小字符,但删除小字符并不是随意删除,而是有条件的,如果整个字符串该小字符只出现了一次,显然不能删除,如果该字符重复出现呢,这时有三种情况:①前面选用了此小字符,那么此字符是必须删除的②前面没有使用此小字符,但此小字符是最后一次出现,这是我们也不能删除(重复字符需要留下一个)③非①②的情况,此时自然是

donnameの博客 276

Leetcode题解-算法-贪心算法

最长的链 646. Maximum Length of Pair Chain(Medium) You are given n pairs of numbers. In every pair, the first number is always smaller than the second number. Now, we define a pair (c, d) can follow anoth...

桑凯旋的博客 1150

CodeForces 1506G Maximize the Remaining String 单调栈

CodeForces 1506G Maximize the Remaining String 单调栈 【题目描述】 You are given a string s, consisting of lowercase Latin letters. While there is at least one character in the string s that is repeated at least twice, you perform the following operation: you choos

weixin_46283740的博客 469

CodeForces 1506G :Maximize the Remaining String 单调栈

传送门 题目描述 给你一个字符串,你可以删除任意一个字符,但是要保证最后每一种字符只能存在一个,并且字符种类不能减少,求最后字典序最大的结果 分析 我们可以分析一下什么情况下一个字符应该被删除 如果这个字符后面的字符比他大,并且后面还存在相同的字符的时候,那么我们就可以把这个字符删除,这个过程有没有很想单调栈的过程?所以我们只需要用单调栈模拟一下就可以了 代码 #pragma GCC optimize(3) #include <bits/stdc++.h> #define debug(x) co

tlyzxc的博客 195

“红旗杯”第十五届东北地区大学生程序设计竞赛 D - Lowbit

原题链接 题意: n个数,m次操作。 操作1:给l,r之间的数加上一个自身的lowbit(二进制下的最低位)。 操作2:查询l,r区间和。 思路: 可以发现进行操作1只有两种情况。 1.如果这个数是2的倍数,那么进行操作1只需要*2就可以了。 2.如果这个数不是2的倍数,那么就是最低位往左移一位。 根据题目中a[i]的范围可以知道一个数最多只能进行15次第二种情况的操作,就是10101010101010101这样的形式的时候。 所以可以对不是2的倍数的值进行暴力单点修改,当一个区间内的值都是2的倍数的时候再

Mamba0Z的博客 770

Codeforces Round #712 (Div. 2)(A-E题解)

场次链接 后悔啊后悔,当天晚上打的时候工作室网炸了,开场五分钟镜像页面才看到题目,A题读完就想到判断最前面和最后面能不能加就行了(字符串渣第一时间没想到直接在原字符串上加,反而去判断s[0]和s[n-1]等不等于’a’然后再写,饶了好大一圈)。写完了准备交的时候原网站也刷出来了,看了一下A过题人数已经有2300了,就没急着交,先去读了一下B和C,吗的读B的时候漏翻了一个prefix,以为可以在任意位置翻转,想了一下卧槽好像很复杂,不对劲啊,这场这么难吗?然后读了下C,发现是个字符串构造,想的时候刷新了一下题

Mamba0Z的博客 386

Codeforces Global Round 15 1552D. Array Differentiation 思维好题 场景转换(建边/dp)

原题链接 题意: 给出n个数a1…an,问能否找到n个数b1…bn使得任意一个ai可以由b数组中两个数相减得到。 思路: 很容易发现x+1个bi是可以随意构造出x个ai的,一个b0=0,其他bi=bi-1 + a[i] 就可以了,所以只要这x+1个bi中还可以构造出一个其他ai就是可行的。 现在的问题就变成了是否存在一段ai的和等于另一段没有重复元素的ai的和,如图所示,有一个像这样环就是可以的。 这是dfs写的,还有一种写法是用三进制枚举,=每一个ai是加还是减或者跳过,然后看有没有sum==0的情况,

Mamba0Z的博客 383

Codeforces Round #710 (Div. 3) F - Triangular Paths

原题链接 题意:有一个无限三角形,顶点为(1,1),左下角分叉横坐标+1,右下角分叉横纵坐标各+1,假设你从(1,1)出发,(x+y)为偶数时向左下移动,(x+y)为奇数时向右下移动,可以强行修改路线,花费为1,求满足经过n个点时的最小花费。 可以画一个0代表偶数,1代表奇数的图,可以发现是有规律的,我是分三种情况讨论。 1.同在一条为1的斜线上或在相邻01线上则花费为0; 2.同在一条为0的斜线上贡献就是两个点的距离; 3.在不同斜线上,如果前一个点在0上,则距离–; #include<bits/

Mamba0Z的博客 336

Deltix Round, Summer 2021 (rated, Div. 1 + Div. 2) C - Compressed Bracket Sequence 反人类绕远路乱搞思维

原题链接 题意: 给一个长度为n的数组,下标为奇数的ai表示这个位置的连续的左括号个数,下标为偶数的ai表示这个位置的连续的右括号个数,求合法的连续子串个数。 思路: 如果是比较短的括号序列,经典栈+dp就可以解决,但这道题显然不能一个括号一个括号遍历,(为了方便用LR代替左右括号)因为LR是交替出现的,我的想法是根据每一对LR的大小关系来统计,那么就有了三种情况。 1.L==R,那么ans += L,L,R个数都清空,并且这一块的LR可以作为合法情况和左边的合法情况进行组合,如果i-1的R也为0,那么就至

Mamba0Z的博客 308
上一篇: Codeforces Round #710 (Div. 3) F - Triangular Paths
下一篇: CodeCraft-21 and Codeforces Round #711 (Div. 2) D. Bananas in a Microwave
丶沙鸥
博客等级 码龄8年 10粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值