2023牛客寒假算法基础集训营5 小沙の不懂(思维)

news2024/12/27 11:44:14

 

 
 

题意:这题目一开始看了半天啊,而且坑点很多(qwq),大概意思就是给你两个字符串a,b(可能存在前导0),然后给你任意个长度为10的从0到9的排列(比如1234567890 ,0923475618...)

让你把这a,b这两个字符串的每一位进行转换,就是根据排列的位置进行转换,假如a的第一个字符是'9',排列是”0923475618“,那么转化之后的字符是这个排列的字符串的下标对应的字符'1'

之后给我们转换之后的字符串A,B,然后问对于所有的情况排列,是否存在ab之间有一定的大小(或者等于)的关系,如果有就输出对应关系,如果没有,就输出"!"。

思路:因为对于所有的排列情况,根据排列的不同,ab的大小关系也很有可能发生变化(比如A=54,B=45在排列p=1234567890和p=0987654321就是刚好的相反的关系),所以我们不能根据最后得到的AB来简单的进行大小的判断。

于是我们可以逐步分析,从两个字符串的长度相等与否来进行分析:

1.A,B字符串长度相同的情况(即a,b字符串长度相等):

如果这两个字符串的长度是相同的话,那么可以简单的得到一个结论:

如果A完全等于B,即a==b(因为如果a==b那么这两个字符串在排列种对应得到的字符串也是完全一致的,反之也成立),否则a!b.

为什么没有大于或者小于的情况了?

因为如果对于两个长度相同的字符串来说,如果他们两个不完全相同,那么就是他们的第一个字符不相同,那么对于长度相同但是第一个字符不同的两个字符串来说,只要这两个字符对应在排列里的下标交换一下顺序,他们两个的大小关系就会发生改变,更不用谈所有情况的排列q了。

好,现在来到坑点众多的重头戏,

2.A,B字符串长度不相同的情况(即a,b字符串长度不等):

乍一看长度不相同,位数都不一样,按道理应该是长度大的那一位始终大于,但是我们要考虑到题目中说过的一句话,这句话存在的意思是什么呢,就是说AB转化之前的ab有前导0的情况(好像是废话?!),那么如果存在前导0,

那么转换前,和转换后的字符串长度其实就不相同了(前导0因为不用来比大小所以不算)

比如:a是000234 排列p=1043526789 ,那么转换后的A为111435,a中本来不作为比较大小的0经过转换多增加了三位。

我们可以根据例子发现,字符串有前导零的情况,多增加的字符串为A中连续且相等的前i个字符1<=i<=n)n为字符串长度。

 

那么我们可以将长度大的那个字符串,取可能为前导零的那一部分(如果取长度小的字符串那就会变的更小),假设为前导零(同时定义个变量表示前导零的那个字符si),然后比较去除前导零后剩下的两个字符串,如果去除后的字符串还是大于另一个字符串的话,就可以说明在任意的排列的情况下有确定的大小关系。

那么怎么根据剩下的字符串来判断大小关系呢?

假设去除前导零后的字符串为_a,_b(两个都要去除,因为都是根据某一个排列进行转换的),如果两个字符串的位数不一样,那么可以很明显的得到_a,_b这两个字符串的大小了,否则就是位数一样的情况,这个时候别急着说没有大小关系了,我们可以从第一位到最后一位逐位判断,如果每一位都相同,那么结果肯定是'!',如果这一位两个字符不相同,那么也有三种情况:

1.a_ib_i都不是前导零的那个字符si,那么这两者的大小情况不能判断,那么就是!

2.如果a_i是那个前导0的字符,那么因为a_i转换前是0,所以无论_b字符串在当前这一位是什么一定会比0大,所以一定是_b>_a。

3.如果是b_i位前导零的字符,根据(2)同理可得一定为_a>_b.

那么字符串的大小就可以直接比较出来了,然后就可以得到最终的结果啦!

ps:这次又写了很长的一篇解析,主要是自己当时做的时候情况分析的太不好了,所以这次想全面的分析一下,如果觉得写的不好其实也无所谓啦(反正是写给自己的

代码:(自己写的代码太屎山了看了蒋佬的还是自愧不如,于是用的是蒋佬的思想然后自己敲了一遍的)

/**
*  ┏┓   ┏┓+ +
* ┏┛┻━━━┛┻┓ + +
* ┃       ┃
* ┃   ━   ┃ ++ + + +
*  ████━████+
*  ◥██◤ ◥██◤ +
* ┃   ┻   ┃
* ┃       ┃ + +
* ┗━┓   ┏━┛
*   ┃   ┃ + + + +Code is far away from  
*   ┃   ┃ + bug with the animal protecting
*   ┃    ┗━━━┓ 神兽保佑,代码无bug 
*   ┃  	    ┣┓
*    ┃        ┏┛
*     ┗┓┓┏━┳┓┏┛ + + + +
*    ┃┫┫ ┃┫┫
*    ┗┻┛ ┗┻┛+ + + +
*/

#include<cstdio>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <string>
#include <math.h>
#include<vector>
#include<queue>
#include<map>
#define sc_int(x) scanf("%d", &x)
#define sc_ll(x) scanf("%lld", &x)
#define pr_ll(x) printf("%lld", x)
#define pr_ll_n(x) printf("%lld\n", x)
#define pr_int_n(x) printf("%d\n", x)
#define ll long long 
using namespace std;

const int N=1000000+100;
int n ,m,h;
int s[N];



int main()
{
	int t;
	string a,b;
	cin>>a>>b;
	if(a.size()==b.size())
	{
		if(a==b)cout<<"=\n";
		else cout<<"!\n";
		return 0;
	}

	char ans='>',zero;

	if(a.size()<b.size())
	{
		ans='<';
		swap(a,b);//直接把长度大的字符串定为a
	}

	zero=a[0];

	int n=a.size(),m=b.size();
	for(int i =0;i<n-m;i++)
	{
		if(a[i]!=zero)//多的部分不是全部为前导零
		{
			cout<<ans<<endl;
			return 0;
		}
	}

	 a.erase(a.begin(), a.begin() + n - m);//去除a字符串长度多余的那一部分
    
	if(a==b){
	cout<<"!\n";
	return 0;
	}
	
	 for(int i=0;i<b.size();i++)
	 {
		if(a[i]!=b[i])
		{
			if(b[i]!=zero)//只有b[i]为zero的时候才能保证a>b
			{
				cout<<"!\n";
				return 0;
			}
			break;//b[i]为0
		}
	 }

	cout<<ans<<endl;

	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

攻防世界:crypt(RC4)

1、下载PE文件&#xff0c;控制台程序2、main函数大致分析&#xff0c;请看下面的注释int __cdecl main(int argc, const char **argv, const char **envp) {unsigned int str_length; // eaxunsigned int myflag_length; // eaxvoid *v5; // raxvoid *v7; // raxint i; // [rs…

软测(概念) · 开发模型 · 软件的生命周期 · 瀑布模型 · 螺线模型 · 增量模型 · 迭代模型 · 敏捷模型 · scrum · 软件测试模型之 V 模型 W 模型

一、开发模型的由来二、软件的生命周期三、瀑布模型&#xff08;Waterfall Model&#xff09;四、螺线模型&#xff08;Spiral Model&#xff09;五、增量模型&#xff08;Incremental Model&#xff09;六、迭代模型&#xff08;Rational UnifiedProcess&#xff09;七、敏捷模…

SQL Server 2014 数据库误删数据的恢复处理

一、序言 作为程序开发人员或 DBA&#xff0c;经常会接触到数据库&#xff08;以 SQL Server 2014 数据库为例&#xff09;的增、删、改查操作。执行 delete 语句时不小心误删数据表的记录情况&#xff0c;而数据库之前又没有任何备份。 SQL Server 数据库自身的数据库还原数…

使用蚁群优化 (ACO) 解决背包问题(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 背包问题&#xff08;Knapsack problem&#xff09;是一种组合优化的NP完全&#xff08;NP-Complete&#xff0c;NPC&#xff0…

【My Electronic Notes系列——组合逻辑电路】

目录 序言&#xff1a; &#x1f3c6;&#x1f3c6;人生在世&#xff0c;成功并非易事&#xff0c;他需要破茧而出的决心&#xff0c;他需要永不放弃的信念&#xff0c;他需要水滴石穿的坚持&#xff0c;他需要自强不息的勇气&#xff0c;他需要无畏无惧的凛然。要想成功&…

【页面设计】03.JavaScript

一、什么是JavaScript&#xff1f; 一种编程语言&#xff0c;可以在网页上实现复杂的功能、交互等。是一种解释型语言&#xff0c;也是一种面向对象的语言。 ps&#xff1a;解释型语言&#xff0c;是在运行的时候将程序翻译成机器语言。解释型语言的程序不需要在运行前编译&a…

怎么找回删除的文件?尝试下这些恢复数据的方法

我们使用电脑时&#xff0c;总会产生各种各样的文件数据。这些文件保存在电脑里面&#xff0c;但是有时不免手滑误删重要的文件。这些文件被删除、被清空了&#xff0c;还可以恢复回来吗&#xff1f;怎么找回删除的文件&#xff1f;建议你尝试下这些恢复数据的方法。 一、文件恢…

一篇了解Eureka

文章目录一.Eureka注册中心1.1.Eureka简介1.2.Eureka基本架构1.2.1 EurekaServer(注册中心)1.2.2 EurekaClient(客户端)二.Eureka项目的构建2.1 新建一个工程EurekaServer-70012.2.将user-service注册到Eureka2.3 消费者从Eureka获取服务2.4.注册微服务信息完善三、CAP理论3.1.…

ITK多线程加速filter

文章目录1. ITK多线程简介1.1 平台多线程1.1.1 基本内容1.1.2 Intel的TBB1.2 典型例子&#xff08;执行原理&#xff09;1.3 5.X版本之后的变动1.4 ITK多线程整体认识1.4.1 基本内容1.4.2 过滤器级别的多线程&#xff08;Filter Level Multithreading&#xff09;1.4.3 内存管理…

Shader绘制2D圆-学习Cherno教程笔记-(OpenGL/Vulkan/DirectX/Metal)-新手向

文章目录相关网址前言基本实现画一个圆步骤1.初步-根据长度绘画圆2.初步-根据1-length(uv)绘画圆3.正式-绘画白色形状的圆(1)if逻辑代码实现(2)用shader的step函数完善圆-实现绘画手环圆1.if逻辑代码实现2.用step函数代替if用smoothstep代替step函数1.smoothstep函数2.使用smoo…

ESP-IDF:使用STL stack栈做检查括号是否匹配测试

ESP-IDF:使用STL stack栈做检查括号是否匹配测试 /使用栈检查括号是否匹配测试/ #include typedef struct LINKNODE20 { struct LINKNODE20 * next; }linknode20; typedef struct MYCHAR20 { linknode20 node; char * address; int index; }MyChar20; MyChar20 * createMyC…

【MFC】文档操作——范例(12)

使用MFC框架文档操作范例&#xff1a; 创建工程 创建工程&#xff0c;其中&#xff1a; 1、MFC单文档 2、自定义改应用程序数据文件扩展名&#xff1a; 3、 最后一步选择CListView&#xff08;用报表显示数据&#xff09; 重点问题&#xff1a;数据文件的读写功能 添加数据类…

电脑多个不同分辨率屏幕鼠标移动时出现偏移、错位情况的解决方法

本文介绍在使用不同尺寸、不同分辨率的两个或多个电脑屏幕时&#xff0c;鼠标在不同屏幕之间切换时&#xff0c;出现偏移、飘动、不规则运动等情况的解决方法。 对于使用两个或多个电脑屏幕的用户而言&#xff0c;鼠标在不同屏幕之间的切换有时候会出现偏移的问题。在同时使用多…

【My Electronic Notes系列——逻辑函数的化简】

目录 序言&#xff1a; &#x1f3c6;&#x1f3c6;人生在世&#xff0c;成功并非易事&#xff0c;他需要破茧而出的决心&#xff0c;他需要永不放弃的信念&#xff0c;他需要水滴石穿的坚持&#xff0c;他需要自强不息的勇气&#xff0c;他需要无畏无惧的凛然。要想成功&…

MySQL入门篇-MySQL字符集小结

备注:测试数据库版本为MySQL 8.0 这个blog我们来聊聊MySQL的字符集 前言: 字符集和排序规则 说实话我对这两个概念比较模糊&#xff0c;其实可以简单的理解: 字符集(character set)&#xff1a;定义了字符以及字符的编码。 排序规则(collation)&#xff1a;定义了字符的比…

【Django】ORM增删改查、F对象和Q对象、聚合操作和原生数据库操作

1、ORM的增删改查均需要通过管理器对象进行。 2、可使用python3 manage.py shell 进入脚本页方便操作。 3、可修改输出格式 一、ORM查询操作 1、查询方法 &#xff08;1&#xff09;all()方法 用法&#xff1a;MyModel.objects.all()作用&#xff1a;查询所有数据&#xff0c…

微信小程序——自定义组件(纯数据字段),组件的生命周期,组件所在页面的生命周期,插槽,父子组件之间的通信,事件绑定,属性绑定,behavior

一.纯数据字段1.什么是纯数据字段概念&#xff1a;纯数据字段指的是那些不用于界面渲染的data字段。应用场景&#xff1a;例如有些情况下&#xff0c;某些 data 中的字段既不会展示在界面上&#xff0c;也不会传递给其他组件&#xff0c;仅仅在当前组件内部使用。带有这种特性的…

《Keras深度学习:入门、实战与进阶》之回归问题实例:波士顿房价预测

本文摘自《Keras深度学习&#xff1a;入门、实战与进阶》。 本节将要预测20世纪70年代中期波士顿郊区房屋价格的中位数。这个数据是1978年统计收集的&#xff0c;数据集中的每一行数据都是对波士顿周边或城镇房价的描述&#xff0c;包含以下14个特征和506条数据。  CRIM&am…

verilog图像算法实现和仿真(代码与实践)

【声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 这里的代码指的是verilog代码,而不是之前的python代码。因为verilog处理的是数据,所以之前我们也谈到过,如果需要用verilog处理图像数据,需要先用python把图像变成文本文件,等到…

菜鸟的进阶--手写一个微型Spring

前言想干嘛深入了解spring原理&#xff0c;特别是IOC容器是如何实现的&#xff1f;AOP是如何实现的&#xff1f;手写一个spring迷你版框架&#xff0c;实现容器和AOP机制。我为什么想这么做spring是整个java体系中最重要的框架&#xff0c;它整合第三方技术&#xff0c;将所有的…