首页 > 其他分享 >Azamon Web Services 题解

Azamon Web Services 题解

时间:2023-09-18 20:56:33浏览次数:35  
标签:Web return string int 题解 ++ Services size

Azamon Web Services

看到目前题解都是 \(O(n^2)\) 的复杂度,来一发 \(O(nlogn)\) 的贪心题解。


思路很简单,先求经过至多一次的交换后,最小的字符串 \(S\)。再和 \(T\) 比较,如果小于就输出,否则无解。

问题转化成了两个子问题:

  1. 求经过至多一次的交换后,最小的字符串 \(S\)。
  2. 和 \(T\) 作比较。

第二个问题很好解决,自己看代码吧,详细说第一个问题。

bool operator < (string a, string b) {
	int n = min(a.size(), b.size());
	for (int i = 0; i < n; i++) {
		if (a[i] < b[i]) return true;
		if (a[i] > b[i]) return false;
	}
	return (a.size() < b.size());
}

贪心地想:字符串最小肯定是让字典序最小的字母尽量靠前

现在有了初步的思路:用一个堆来维护 \(S\) 中的每个元素,从前往后扫一遍 \(S\),如果当前元素等于堆顶,弹出堆顶,否则交换并退出循环。

代码:

using pci = pair<char, int>;

bool operator < (string a, string b) {
	int n = min(a.size(), b.size());
	for (int i = 0; i < n; i++) {
		if (a[i] < b[i]) return true;
		if (a[i] > b[i]) return false;
	}
	return (a.size() < b.size());
}

void Sol() {
	string s, t;
	cin >> s >> t;
	priority_queue<pci, vector<pci>, greater<pci>> p;
	for (int i = 0; i < s.size(); i++)
		p.push({s[i], i});
	for (auto &i : s) {
		if (i == p.top().first) p.pop();
		else {
			swap(i, s[p.top().second]);
			break;
		}
	}
	if (s < t) cout << s << '\n';
	else puts("---");
}

提交后你会发现错了,为什么?

看下面这组样例:

1
AZAAA AAZAA

上面代码所构造出的“最小 \(S\) ”是 AAZAA,这显然不是正确答案。

交换的 A 是要越后面越好,因为在让字典序最小的字母尽量靠前的前提下,让字典序大的字母越靠后越优

set 实现,详细看代码(也没什么细节)。

最终代码:

#include <bits/stdc++.h>

using namespace std;

int read() {
	int x;
	scanf("%d", &x);
	return x;
}

using pii = pair<int, int>;

bool operator < (string a, string b) {
	int n = min(a.size(), b.size());
	for (int i = 0; i < n; i++) {
		if (a[i] < b[i]) return true;
		if (a[i] > b[i]) return false;
	}
	return (a.size() < b.size());
}

set<pii> p;
void Sol() {
	p.clear();
	string s, t;
	cin >> s >> t;
	for (int i = 0; i < s.size(); i++)
		p.insert({s[i], i});
	for (auto &i : s) {
		char mn = (*p.begin()).first;
		if (i == mn) p.erase(p.begin());
		else {
			auto it = --p.lower_bound({mn, int(1e9)});
			swap(i, s[(*it).second]);
			break;
		}
	}
	if (s < t) cout << s << '\n';
	else puts("---");
}

int T;
int main() {
	T = read();
	while (T--) Sol();
}

由于常数和数据等问题,本题时间并不比 \(O(n^2)\) 快多少。

标签:Web,return,string,int,题解,++,Services,size
From: https://www.cnblogs.com/ccxswl/p/17713027.html

相关文章

  • CF762C Two strings 题解
    洛谷传送门CF传送门题意给你两个字符串\(a\)和\(b\),你可以在\(b\)中删去尽量短的子段,使得\(b\)是\(a\)的子序列。求出最后的\(b\)。思路真是奇了怪了,这种题洛谷题解里竟然没有双指针的做法?首先考虑判断一个字符串\(b\)是否是另一个字符串\(a\)的子序列。这......
  • JavaWeb基础
    JavaWeb基础概念:JavaWeb,是用Java技术来解决相关web互联网领域的技术栈。web分为静态web和动态web,静态web包括css和html这种,设定后就不会变了,动态简单理解就是数据会随时改变,比如淘宝,每个人在不同时间不同地点看到的信息是不一向的,对于java来讲,动态web资源开发技术就统称为javaw......
  • Alice and Hairdresser题解
    AliceandHairdresser第一眼线段树,第二眼好像可以直接用数组模拟。当一根头发长于\(l\),它再长多长其实都一样,所以不用开longlong。如果一根新的头发长到比\(l\)长,那可以分成以下几种情况:如果它左侧和右侧只有一个元素大于\(l\),那答案不变。如果左侧和右侧都大于......
  • c# winform打开外部程序异常问题解决方案
    c#winform中打开外部程序的常规操作是使用Process类,此时,如果外部程序没有对路径的操作或其他路径文件的操作时,通常不会出现报错或异常;反之,会出现找不到路径或者直接抛出异常。此种情况主要是因为外部程序和当前程序不在一个路径下导致的,以下是解决方案:System.IO.Directory.Set......
  • Webpack字体文件处理指南
    前言Webpack是一个现代的JavaScript应用程序打包工具,它可以帮助我们处理项目中的各种资源文件,包括字体文件。本篇博客将详细介绍如何使用Webpack来处理字体文件,并给出合理标题。为什么需要处理字体文件?在前端开发中,我们经常会使用各种字体文件来美化页面的显示效果。然而,如果不......
  • WebStorm 2023:JavaScript开发者的终极利器
    WebStorm是JetBrains公司开发的一款强大的JavaScript开发工具,为前端开发者提供了丰富的功能和智能,帮助他们提高开发效率、降低出错率并提高代码质量。→→↓↓载RubyMine2023mac+win版代码提示与自动补全:WebStorm能够根据用户输入的内容,提供代码提示与自动补全功能,减少用户......
  • web自动化测试简介
    一、web自动化简介1、什么是自动化测试?2、为什么要进行自动化测试?3、哪些项目适合web自动化测试?1)需求稳定,任务测试明确,不会频繁变更2)研发和测试周期长,需要频繁执行回归测试3)需要在多种平台上重复运行相同的场景4)某些测试项目的手工成本较高5)被测软件的开发较为规范,能够保......
  • WEB漏洞-XXE&XML之利用检测绕过全解
    XML内容: <?xmlversion="1.0"?> <!DOCTYPEa[ <!ENTITY%dSYSTEM“file:///etc/passwd”>%d; ]> <c>%d;</c> XML内容 <?xmlversion=’1.0’?> <!DOCTYPEa[ <!ENTITY%dSYSTEM“http://abc.com/evil.dt......
  • webpack打包报错:Unexpected token (Note that you need plugins to import files that
    关于这个问题,我在网上查找了一些资料(博客、问答),得到的答案多种多样:1.可能是缺少rollup的某种plugin;2.可能是系统环境的问题(windows/linux/macos);3.可能是某段代码引起的问题;4.。。。 经过对自身情况的逐步测试定位,发现->出问题的代码片段:callbacks:{onMouseMove,......
  • webtest / autotest4 / uitest / cypress
    s前端开发:基于cypress的自动化实践,https://www.cnblogs.com/fnng/p/14583259.htmlUI自动化测试框架Cypress介绍和使用, https://www.cnblogs.com/5566yesongqiao/p/16202162.html # 引用官网的介绍语,快速、简单、可靠的在浏览器测试一切的工具。cypress是比较新的一个......