Codeforces 559B Equivalent Strings 等价串

CF559B Equivalent Strings TJ 文章目录前言题意简述分析CodeCodeCode写在最后 前言 题目传送门 正解:模拟,递归。 考试的 T4,还是想复杂了 qwq。 这题不要用 STL,容易 TLE\texttt{TLE}TLE!! 题意简述 翻译够简了。 对了给一下样例解释的翻译: 第一个样例的第一组测试数据中,对于 a=aabaa=aabaa=aaba 和 b=abaab=abaab=abaa,可以分成 a1=aa,a2=ba,b1=ab,b2=aaa1=aa,a2=ba,b1=ab,b2=aaa1=aa,a2=ba,b1=ab,b 阅读详情

题意:给定两个等长串a,b,判断是否等价。等价的含义为:若长度为奇数,则必须是相同串。若长度是偶数,则将两串都均分成长度为原串一半的两个子串al,ar和bl,br,其中al和bl等价且ar和br等价,或者al和br等价且ar和bl等价。








实际上很水。直接按照题意模拟写个递归分治就可以求。比赛的时候总觉得这样暴力写会TLE,因为算了下大概是4^(log2(n))的复杂度,也就是n^2,所以比赛的时候就想了下,将两个串都按照题意转化为字典序最小串(循环节的最小表示法)然后比较a和b的两个最小表示法是否是相同的即可。

后来想了半天为什么分治到不了4^(log2(n))的复杂度呢?原因是这样的:我们就按照这个复杂度去构造串。首先,如果要让al和ar比较,bl和br比较,且al和br也比较,ar和bl也比较的话,则必须满足al和bl等价,ar和br不等价,且al和br等价,这样才能保证让ar和bl去比较。然而我们在比较的al和bl的时候,再分治,设al分成了all,alr,bl分成了bll,blr,要想让它再比较4次,则有all和bll等价,alr和blr不等价,alr和bll等价,但因为这个情况下al和bl是等价的,所以必须有alr和bll等价。我们简单的写成

all = bll

alr != blr

alr = bll

all = blr

然而这4个等式可以推出all = bll = alr = blr,即4个子串任意都能等价,与第二个等式矛盾。这说明无法构造一种串使得复杂度达到4^(log2(n))。实际上,在很多时候递归只进行了三次甚至两次一次就返回了。因此分治的效率也是很高的。当然,最小表示法的复杂度是O(n*log(n))的,那是一定可以过。实际上还是分治的思想,只不过处理上有点不同罢了。







#include <cstdio>
#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>
#include <stack>
#include <vector>
#include <map>
#include <set>
using namespace std;

const int MAX = 2*1e5 + 5;
char a[MAX], b[MAX];

int cmp(char *x, int l1, int l2, int len)
{
    for(int i = 0; i < len; i++)
    {
        if(x[l1 + i] < x[l2 + i])
            return -1;
        if(x[l1 + i] > x[l2 + i])
            return 1;
    }
    return 0;
}

void translation(char *x, int l, int r) //将原串变为字典序最小的串
{
    if((r - l + 1)&1)
        return;
    int mid = (l + r) >> 1, len = (r - l + 1) >> 1;
    translation(x, l, mid);
    translation(x, mid + 1, r);
    if(cmp(x, l, mid + 1, len) < 0)
    {
        for(int i = 0; i < len; i++)
            swap(x[l + i], x[mid + 1 + i]);
    }
}

void solve()
{
    int lena = strlen(a), lenb = strlen(b);
    translation(a, 0, lena - 1);
    translation(b, 0, lenb - 1);
    printf("%s\n", strcmp(a, b) == 0 ? "YES" : "NO");
}

int main()
{
    while(scanf("%s%s", a, b) != EOF)
        solve();
    return 0;
}


瑞萨RH850/U2A8以太网模块mcal说明 如下所有功能的支持需要在达芬奇中开启EthGlobalTimeSupport。秒[32bit], 纳秒[32bit], 纳秒小数[20bit]每一帧发送数据的相关结构缓冲区都放在变量。每一帧接收数据的相关结构缓冲区都放在变量。 阅读详情

相关推荐

避开模板匹配的坑:OpenCVSharp中边缘梯度算法的优化实践

本文深入探讨了OpenCVSharp中边缘梯度算法在模板匹配中的优化实践,解决了传统方法在尺度变化、角度旋转和光照差异下的局限性。通过Sobel算子提取边缘梯度特征,结合轮廓检测和多尺度匹配策略,显著提升了匹配的鲁棒性和准确性。文章还分享了并行计算、内存访问优化等实战技巧,适用于工业检测和自动化识别场景。

http9protocoller的博客 198

CodeForces 559 B.Equivalent Strings(递归)

Description 定义两个字符串“相等”有以下两种情况: 1.两字符串完全相同 2.将a,b串分别均分成两个子串a1,a2,b1,b2,则当a1与b1“相等”且a2与b2“相等”或者当a1与b2“相等”且a2与b1“相等”时,a和b“相等” 现给出两字符串,判断其是否“相等” Input 两个字符串 Output 若两串“相等”则输出YES,否则输出NO Sample In...

ZSQ 1245

高通AI Engine SDK(QNN)使用教程(环境配置、模型转换、量化、推理、分析)

高通AI Engine使用教程

weixin_51031772的博客 1万+

codeforces(559B)--B. Equivalent Strings(暴搜 或 最小表示法)

B. Equivalent Strings time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Today on a lecture about strings Gera

随风的专栏 2046

qt使用qxlsx实现xlsx、xls表格文件快速写入和读取

新年第二篇文章,收尾一个去年计划中发表文章和实现功能。

kbq的博客 1万+

publisher与subscriber话题的消息类型md5sum不一致问题

[ERROR] [1604235557.591296096]: Client [/range_vision_fusion_01] wants topic /detection/vision_objects to have datatype/md5sum [autoware_msgs/DetectedObjectArray/13415342e539aa36ea9a6f04ffaf39b4], but our version has [autoware_msgs/DetectedObjectArray/c16a

cxhmike的博客 6620

codeforces-559B-Equivalent Strings

codeforces-559B-Equivalent Strings

Linoy 1187

KEPServerEX物联网网关(IoT Gateway)REST客户端代理(非原创)

(中文版)资料来源于【OPC-KEPServerEX学习KEPWare交流】905485143群的【455196383】【零下一度】 一。KEPServerEX物联网网关REST客户端代理演示 在KSE中,首先构建一个带有通道/设备/标签的模拟器系统。 例如,下面是三个随机项目。 直接到IoT网关插件,添加新代理。 从类型列表中选择REST Client。 终结点...

-雲飛兄-博客 5807

B. Equivalent Strings

http://codeforces.com/contest/559/problem/B 题意:给两个字符串,两个串相等条件:(1)直接相等(2)两个字符串在中间切开后a1,a2; b1,b2 ;有a1=b2&amp;&amp;a2=b1; 可以一直分; 思路:递归搜索,奇数长度时直接判断; #include&lt;bits/stdc++.h&gt; /*#include&lt;algo...

newhonor 239

MATLAB 基于深度学习的步态识别算法仿真

步态识别是一种通过分析人体行走方式来识别身份的技术。基于深度学习的步态识别算法利用卷积神经网络 (CNN) 提取步态特征,并通过分类器进行身份识别。基于深度学习的步态识别算法是实现身份识别的重要手段,具有广泛的应用前景。MATLAB 提供了丰富的工具和函数,可以方便地进行算法仿真和性能评估。

走向CTO的路上... 518

(第14天)Veritas NetBackup(NBU) 配合 RMAN 脚本备份 Oracle 数据库

NBU(Veritas Netbackup)是企业中比较常用的备份软件,通常用于备份企业使用中的系统,数据库,文件等等,通常是搭配 Oracle RMAN 来进行备份 Oracle 数据库。

LuciferLiu_DBA 1642

Codeforces Round #313 D. Equivalent Strings(DFS)

D. Equivalent Strings time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Today on a lecture about strings Gera

叶孤心的专栏 1124

LangGraph-StateGraph 和 Graph API 源码分析

摘要: StateGraph是LangGraph的核心API,用于构建有状态工作流图。本文分析了其实现原理,包括: 核心类关系:StateGraph(构建器)和CompiledStateGraph(继承自Pregel的可执行图) 关键流程:状态模式到通道的映射、节点到PregelNode的转换 实现特点: 支持TypedDict和Pydantic两种状态模式 自动选择通道类型(LastValue或BinaryOperatorAggregate) 通过映射函数处理节点输入输出 边实现基于通道写入机制 编译过程

838

CodeForces 559B Equivalent Strings

思路:不停分治就好啦 #include using namespace std; const int maxn = 200005; char a[maxn],b[maxn]; bool cmp(char a[],char b[],int len) { bool isok = 1; for (int i = 0;i<len;i++) if (a[i]!=b[i]) isok=

围巾的ACM博客 574

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

[codeforces 559B]Equivalent Strings

题目:559B 题意:给定两个字符串,判断是不是一个神奇的字符串。 他们满足如下两个条件的其中之一: 1、 A与B相等。 2、 如果我们把字符串A分成两个长度相等的字符串A1,A2,并将字符串B分成两个长度相等的字符串B1,B2 然后他们满足以下的其中一项条件: (1) A1与B1是一对神奇的字符串,并且A2与B2是一对神奇的字符串。 (2) A2与B1是一对神奇的字符串,并且A1与B2是一对神奇的字符串。 思路: 很显然用递归的思想,但是单纯的递归会TLE #include<iostream>

ryeblablabla的博客 351

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Codeforces - 559B - Equivalent Strings - 分治

http://codeforces.com/problemset/problem/559/B 这个题目,分治就好了,每次偶数层可以多一种判断方式,判断它的时间就是logn的(吧),注意奇数层并不是直接退出!题目给了另一种相等的条件。 #include<bits/stdc++.h> using namespace std; #define ll long long ch...

weixin_30414155的博客 241

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

559B - Equivalent Strings & 560D - Equivalent Strings

D. Equivalent Strings time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Today on a lecture about strings Gerald learned

01的世界 1126

Equivalent Strings CodeForces - 559B 递归

Today on a lecture about strings Gerald learned a new definition of string equivalency. Two stringsaandbof equal length are calledequivalentin one of the two cases: They are equal. If we split...

zhangjinlei321的博客 266

codeforces 559B Equivalent Strings 分治归并

Equivalent Strings   Today on a lecture about strings Gerald learned a new definition of string equivalency. Two strings a and b of equal length are called equivalent in one of the two cases: They ...

cloudy_happy的博客 241

Codeforces 559B Equivalent Strings(分治)

B. Equivalent Strings time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Today on a lecture about strings Gerald learned a new defin...

本该如此 386

Codeforces 559B - Equivalent Strings

559B - Equivalent Strings 思路:字符串处理,分治 不要用substr(),会超时 AC代码: #include<bits/stdc++.h> #include<cstring> using namespace std; #define ll long long const int N=2e5+5; bool cmp(char ...

weixin_34238642的博客 167

Codeforces 559B Equivalent Strings 想法题

题目大意: 就是根据题目中给出的定义判断两个串是否相同 大致思路: ....前来补好久之前每补的题.... 当时这个题比赛的时候直接递归根据定义用Hash判断的然后TLE了.... 好吧毕竟不是正解 这个题的正确做法是每次将串分成两半按照字典序排序, 这样递归回溯排好之后, 如果两个串根据题目中的定义是相同的话, 那么这样做之后一定会使得两个串相同 并且时间复杂度也是严格意义

Gatevin的专栏 842

Equivalent Strings CodeForces - 559B(dfs)

Today on a lecture about strings Gerald learned a new definition of string equivalency. Two strings a and b of equal length are called equivalent in one of the two cases: They are equal. If we split s...

tomjobs的博客 482

codeforces 559B Equivalent Strings

递归

依然一笑作春温。 770
上一篇: Codeforces 559A Gerald's Hexagon 数三角形
下一篇: Codeforces 560A Currency System in Geraldion 货币组合
FirstLucker
博客等级 码龄11年 8粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值