「杂题乱刷2」CF1493C

news/2024/9/13 11:44:40/文章来源:https://www.cnblogs.com/wangmarui/p/18378530

题目链接

K-beautiful Strings CF1493C

解题思路

首先,如果原字符串是合法的直接输出原字符串即可。

然后我们考虑一个最简单的暴力,你枚举第一个你构造的字符串比原串大的字符的位置,再枚举这个字符,然后后面的肯定是从后往前贪心放即可,在此不再赘述。

这样的复杂度是 \(O(|S|^2 \times V^2)\) 的,其中 \(V = 26\)\(|S|\) 代表给定的字符串长度,这样的时间复杂度并不优秀,不能通过本题,

考虑你从后缀往前扫,维护一个桶,每次向前一个字符只需要使用 \(O(1)\) 的时间复杂度修改,而从后缀往前扫,不难发现,这样构造出来的第一个字符串是一定最优的。

时间复杂度 \(O(|S| \times C^2)\),可以通过此题。

参考代码

点击查看代码
#include<bits/stdc++.h>
using namespace std;
//#define map unordered_map
#define re register
#define ll long long
#define forl(i,a,b) for(re ll i=a;i<=b;i++)
#define forr(i,a,b) for(re ll i=a;i>=b;i--)
#define forll(i,a,b,c) for(re ll i=a;i<=b;i+=c)
#define forrr(i,a,b,c) for(re ll i=a;i>=b;i-=c)
#define pii pair<ll,ll>
#define mid ((l+r)>>1)
#define lowbit(x) (x&-x)
#define pb push_back
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define endl '\n'
#define QwQ return 0;
ll _t_;
void _clear(){}
ll n,m;
string s;
ll a[30];
ll pd;
string ans;
ll f(char x){return x-'a'+1;
}
void check(ll x,char y)
{a[f(y)]++;ll need=0;
//	forl(i,1,10)
//		cout<<a[i]<<' ';
//	cout<<endl;forl(i,1,26)need+=(m-a[i]%m)%m;
//	cout<<need<<' '<<n<<' '<<x<<endl;if(n-x<need){a[f(y)]--;return ;}pd=1;ans="";forl(i,0,n)ans+=' ';forl(i,1,x-1)ans[i]=s[i];ans[x]=y;ll id=0;forr(i,n,x+1){ll pd2=0;forr(j,26,1)if(a[j]%m){a[j]++,ans[i]=j+'a'-1;pd2=1;break;}if(!pd2){id=i;break;}}forl(i,x+1,id)ans[i]='a';
}
void solve()
{ans="",pd=0; _clear();cin>>n>>m>>s;if(n%m){cout<<-1<<endl;return ;}s=' '+s;forl(i,1,26)a[i]=0;forl(i,1,n)a[f(s[i])]++;forl(i,1,26){if(a[i]%m)break;if(i==26){for(auto j:s)if(j!=' ')cout<<j;cout<<endl;return ;}}
/**	a[f(s[4])]--;a[f(s[3])]--;a[f(s[2])]--;check(2,'c');*/forr(i,n,1){a[f(s[i])]--;forl(j,s[i]+1,'z'){check(i,j);if(pd){for(auto j:ans)if(j!=' ')cout<<j;cout<<endl;return ;}}}
}
int main()
{IOS;_t_=1;cin>>_t_;while(_t_--)solve();QwQ;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/786805.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSP-S 2024 游记

壹 我有一个朋友叫小 W ,他最近有点闷。 我问他为什么闷,他跟我说他根本就没准备初赛。 我说你这么牛,连初赛都不用准备。 他说,他在梦中见到了 ddz ,他问 ddz 没准备初赛怎么办, ddz 给他的答复是:不是,哥们。你都免初赛了还问我干啥啊。 贰 我喜欢月光。 空空,不可控…

别样的ABC大战

前言:BYD ABC 大战。此事发生于2024年3月,为保护隐私(有的人应该能看出来哈哈),人物名字均使用字母代替。故事虽根据真实事件改编,但较为夸张。 一天,W老师给我发来微信。她说:“你敢不敢和其他人举行ABC大战?”我豪爽的答应了:“我当然敢!”周六下午在花园路XX号举…

【NextJS】中间件实战介绍

原创 洞窝技术使用 Next.js 中间件实现高性能个性化 在当今的数字时代,用户期望获得量身定制的在线体验。个性化已经从一个奢侈品变成了必需品,尤其是对于希望在竞争激烈的市场中脱颖而出的企业来说。然而,实现高性能的个性化往往是一个挑战,需要在用户体验和系统性能之间取得…

排列组合问题

排列公式 从 \(n\) 个数中选出 \(m\) 个数并且排序。 公式推导: \[ A^2_3 = 3 \times 2 = 6\\3_6 = 6 \times 5 \times 4 = 120\\ A^2_6 = 6 \times 5 = 30\\ \therefore A^m_n = n(n-1)(n-2)\dots (n-m+1)\\ 又\because n!=n\times (n-1)\times (n-2) \dots \times 2\times…

Docker简介及安装

本系列将会与大家分享 Docker 的相关知识。本章主要简要介绍 Docker,并指导大家如何在 CentOS 7 上进行 Docker 的安装。本系列将会与大家分享 Docker 的相关知识。本章主要简要介绍 Docker,并指导大家如何在 CentOS 7 上进行 Docker 的安装。废话不多说,下面我们直接进入主…

C程序设计语言(第2版新版)练习题1-9

练习1-9 编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替。#include <stdio.h>int main(int argc, char *argv[]) {(void)argc;(void)argv;int c;int c_last = \0;while((c = getchar()) != EOF) {if (( != c) || ( != c_last)) {putchar(c);}c…

C# .NET CORE 知识点总结【基础篇】

心之所向,勇往直前!记录面试中的那些小事。面试题只是一道门,最好还是走进屋里看看。正文 结语本篇到此结束,如果有任何疑问或者指正,请发表在评论区。

相遇(容斥+最短路+分类,水紫)

第5题 相遇 查看测评数据信息给定一个有n个节点m条边的无向图,在某一时刻节点st上有一个动点a, 节点end上有一个动点b, 动点a向节点end方向移动,要求是尽快到达end点,与此同时,动点b向节点st方向移动,要求是尽快到达st点, 但是整个过程中a和b不能相遇,问两点不相遇一…

NYX靶机笔记

NYX靶机笔记 概述 VulnHub里的简单靶机 靶机地址:https://download.vulnhub.com/nyx/nyxvm.zip 1、nmap扫描 1)主机发现 # -sn 只做ping扫描,不做端口扫描 nmap -sn 192.168.84.1/24 # 发现靶机ip为 MAC Address: 00:50:56:E0:D5:D4 (VMware) Nmap scan report for 192.168.…