Problem - 1562B - Codeforces

题意:给定一个字符串,每次操作可以选择这个字符串中的一种字符,将他们全部都减1,最多K次操作,问可以形成的字典大小最小的字符串。

题解:首先我们观察这个字符串,很明显,如果两个字符不相同,我们把大的减小到和小的相等,然后再两个一起减小,就省去了一部分的操作,从而减少操作次数,因此,我们先把每种字符按照第一个先后出现的顺序存储,然后遍历这个数组,判断你当前读入的字符是不是到现在为止的最大字符,如果不是,就证明这个字符比前面的小,这样这个字符肯定就已经被连带减小了

例如:c b 在减小c的时候,当c等于了b,就可以同时减小两个。 所以当该字符不是最大字符时,就不需要管它。如果是,就判断该字符与上一个最大字符的差值,即你要变成上一个字符需要几次操作,然后与前面需要的操作相加,看看是否超过最大操作数,如果超过就能减少几个减少几个,没超过就加到总操作数里继续看下一个字符。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
const int N=4e4+5;
const ll mod=1e9+7;
ll dp[N],vis[26];
vector<ll> q[N],p;
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
ll t;cin>>t;
while(t--){
ll n,m;cin>>n>>m;
string s;cin>>s;
p.clear();
memset(vis,0,sizeof(vis));
for(ll i=0;i<=25;i++) q[i].clear();
for(ll i=0;i<s.size();i++){
q[s[i]-'a'].push_back(i);//记录该字符出现的位置
if(!vis[s[i]-'a']){
vis[s[i]-'a']=1;
p.push_back(s[i]-'a');//记录每种字符出现的先后顺序
}
}
ll sum=0;
ll maxn=-1;
ll last=0;
for(ll i=0;i<p.size();i++){
maxn=max(maxn,p[i]);
if(p[i]!=maxn) continue;//判断是否最大值
if(p[i]-last+sum>m){
for(ll j=0;j<q[p[i]].size();j++){
s[q[p[i]][j]]-=(m-sum);//将每个位置的字符能减少几减少几
}
for(ll j=p[i]-(m-sum);j<p[i];j++){
for(ll z=0;z<q[j].size();z++){
s[q[j][z]]=p[i]-(m-sum)+'a';//减少过程中,判断有没有比它小的字符被连带减小,有就更新
}
}
break;
}
for(ll z=0;z<=p[i];z++){
for(ll j=0;j<q[z].size();j++){
s[q[z][j]]='a';//如果操作数足够,就肯定会减少到 a
}
q[z].clear();//该字符减少完后就没有了,所以要清零
}
sum+=p[i]-last;
last=p[i];
}
cout<<s<<endl;
}
}

CF-1562B- Scenes From a Memory的更多相关文章

  1. 2021record

    2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...

  2. cocod2d-x 之 CCDirector、CCScene、CCSprite

    CCDirector是控制游戏流程的主要组件. typedef enum { /// sets a 2D projection (orthogonal projection)2D投机模式 kCCDir ...

  3. cocos2dx进阶学习之场景切换

    背景 在学习马里奥时,我们学习到从菜单场景到游戏场景的切换,代码如下 void CMMenuScene::OnStartCallBack( CCObject *pSender ) { CCDirect ...

  4. Codeforces Round #741 (Div. 2)部分题题解

    我果然还是太菜了,就写了两道题....真是水死了.... A The Miracle and the Sleeper 简化题意:给定\(l,r\),求\(a\)%\(b\)的最大值,其中\(r> ...

  5. Codeforces Round #741 (Div. 2)

    全部题目跳转链接 A - The Miracle and the Sleeper 题意 给定\([l, r]\) 求出在这个区间内的两个数字a和b的取模的最大值 (\(a \ge b\)) 分析 上届 ...

  6. 【NX二次开发】NX内部函数,libugui.dll文件中的内部函数

    本文分为两部分:"带参数的函数"和 "带修饰的函数". 浏览这篇博客前请先阅读: [NX二次开发]NX内部函数,查找内部函数的方法 带参数的函数: bool A ...

  7. CF R638 div2 F Phoenix and Memory 贪心 线段树 构造 Hall定理

    LINK:Phoenix and Memory 这场比赛标题好评 都是以凤凰这个单词开头的 有凤来仪吧. 其实和Hall定理关系不大. 不过这个定理有的时候会由于 先简述一下. 对于一张二分图 左边集 ...

  8. cf 712E Memory and Casinos

    题意:有一行$n(n \leq 100000)$个方格,从左往右第$i$个方格的值为$p_i(p_i = \frac{a}{b}, 1 \leq a < b \leq 1e9)$,有两种操作,一 ...

  9. CF 187C Weak Memory 优先队列 难度:2

    http://codeforces.com/problemset/problem/187/C 这道题可以用二分+dfs检测,或者优先队列解 此处用了优先队列解法 从起点出发,维护一个优先队列,内容是p ...

  10. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

随机推荐

  1. 全球共有多少MySQL实例在运行?这里有一份数据

    摘要 Shadowserver Foundation在5月31日发布了一份全网的MySQL扫描报告,共发现了暴露在公网的360万个MySQL实例.因为这份报告基数够大,而且信息也非常完整,从数据库专业 ...

  2. vscode常用插件快捷键

    俗话说,工欲善其事必先利其器,我们码农的器是什么尼?没错,就是我们亲爱的IDE,前端开发者最爱的编辑器应该是vscode了吧.但是我们要怎么去锋利它尼?不外乎就是熟悉它的使用方法.快捷键以及第三方的插 ...

  3. Vue开发组件之替代marquee标签,超出宽度文字横向滚动效果

    一.npm 安装 如果你想安装插件(自己写的)安装 install dependencies npm i marquee-components 使用 在main.js引入 import marquee ...

  4. 拒绝蛮力,高效查看Linux日志文件!

    原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介 日常分析问题时,会频繁地查看分析日志,但如果蛮力去查看日志,耗时费力还不一定有效果,因此我总结了在Linux常用的 ...

  5. RPA应用场景-公积金贷款业务数据整合和报送

    场景概述 公积金贷款业务数据整合和报送 所涉系统名称 个贷系统.公积金管理系统 人工操作(时间/次) 0.5小时 所涉人工数量1000操作频率 每日 场景流程 1.机器人整理个人贷款信息.个人贷款账户 ...

  6. NC14731 逆序对

    NC14731 逆序对 题目 题目描述 求所有长度为 \(n\) 的 \(01\) 串中满足如下条件的二元组个数: 设第 \(i\) 位和第 \(j\) 位分别位 \(a_i\) 和 \(a_j\) ...

  7. Min_25 筛与杜教筛

    杜教筛 \(\) 是 \(\) 的前缀和,\(\), \(\) 同理. 假设 \( × = ℎ\) ,并且 \(, \) 易求出,\(\) 难求出. 那么 \[H () = \sum_{ \cdot ...

  8. C++ 练气期之指针所指何处

    1. 指针 指针是一种C++数据类型,用来描述内存地址. 什么是内存地址? 内存中的每一个存储单元格都有自己的地址,地址是使用二进制进行编码.地址从形态上看是一个整型数据类型.但是,它的数据含义并不表 ...

  9. JavaWeb的技术体系

    客户端和服务器端的交互 browser/ server(B/S)浏览器/服务器. client/server(C/S)应用/服务器.

  10. Object类和Dome的新媒体类型

    Object类 所有的类都是继承自Object的 Java Object 类是所有类的父类,也就是说 Java 的所有类都继承了 Object,子类可以使用 Object 的所有方法 Object 类 ...