codeforces Edu 142 D. Fixed Prefix Permutations 【思维、字典树求LCP】

D. Fixed Prefix Permutations

D

题意

给定 n n n 个长度为 m m m排列 a 1 , a 2 , . . . a n a_1,a_2,...a_n a1,a2,...an

定义一个排列 p p p价值最大顺序长度 k k k p 1 = 1 , p 2 = 2 , p 3 = 3 , . . . p k = k p_1 = 1,p_2 = 2, p_3 = 3, ... p_k = k p1=1,p2=2,p3=3,...pk=k,如果 p 1 ≠ 1 p_1 \neq 1 p1=1,那么 p p p 的价值为 0 0 0

定义两个排列的 乘积 为: p ⋅ q = r ,其中 r j = q p j p \cdot q = r,其中 r_j = q_{p_j} pq=r,其中rj=qpj

现在对于每个 i ∈ [ 1 , n ] i \in [1, n] i[1,n],求出 最大 a i ⋅ a j a_i \cdot a_j aiaj(注意 j j j 可以等于 i i i

思路

对于当前的 a i a_i ai,我们需要找到一个 j j j,使得 a i ⋅ a j = ( 1 , 2 , 3 , 4 , . . . . k , r k + 1 , . . . . r m ) a_i \cdot a_j = (1,2,3,4,....k, r_{k + 1},....r_m) aiaj=(1,2,3,4,....k,rk+1,....rm) 中的 k k k 最大
如果 k k k 刚好等于 m m m 的话, a i ⋅ a j = ( 1 , 2 , 3 , 4 , . . . . , m ) a_i \cdot a_j = (1, 2, 3, 4,...., m) aiaj=(1,2,3,4,....,m)

此时我们转换一下: a i = ( 1 , 2 , 3 , 4 , . . . , m ) ⋅ a j − 1 a_i = (1,2,3,4,..., m) \cdot a_j ^ {-1} ai=(1,2,3,4,...,m)aj1

不难发现,对于一个顺序度为 m m m 的排列 ( 1 , 2 , 3 , 4 , . . . , m ) (1,2,3,4, ..., m) (1,2,3,4,...,m),它乘上 a j − 1 a_j ^ {-1} aj1 不会改变 a j − 1 a_j ^ {-1} aj1 的内容

也就是: a i = a j − 1 a_i = a_j ^ {-1} ai=aj1
更一般地,当 k < m k < m k<m 时, a i a_i ai 的前 k k k 位 与 a j − 1 a_j ^ {-1} aj1 的前 k k k 位是 一样 的!

那么我们只需要求出每个 a i a_i ai,然后再与当前的 a i a_i ai 比较,最长公共前缀就是当前 a i a_i ai 的答案

如何求逆?由 p ⋅ p − 1 = [ 1 , 2 , 3 , 4 , . . . , m ] p \cdot p ^ {-1} = [1,2,3,4,..., m] pp1=[1,2,3,4,...,m] 得: p p j − 1 = j p ^ {-1}_{p_j} = j ppj1=j,也就是以 p p p 为下标映射, p j p_j pj 指向的位置一定得为 j j j

那么我们只需要将每个逆存在 T r i e Trie Trie 上,对于当前的 a i a_i ai T r i e Trie Trie 上跑 L C P LCP LCP (最大公共前缀)即可

时间复杂度: O ( n m ) O(nm) O(nm)

#include<bits/stdc++.h>
#define fore(i,l,r)	for(int i=(int)(l);i<(int)(r);++i)
#define fi first
#define se second
#define endl '\n'
#define ull unsigned long long
#define ALL(v) v.begin(), v.end()
#define Debug(x, ed) std::cerr << #x << " = " << x << ed;const int INF=0x3f3f3f3f;
const long long INFLL=1e18;typedef long long ll;const int N = 500050;struct node{int son[11];
}tree[N];int cnt = 0;int main(){std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);int t;std::cin >> t;while(t--){int n, m;std::cin >> n >> m;std::vector<int> ans(n + 1, 0);std::vector<std::vector<int>> a(n + 1, std::vector<int>(m + 1, 0));fore(i, 1, n + 1)fore(j, 1, m + 1)std::cin >> a[i][j];fore(i, 1, n + 1){std::vector<int> b(m + 1);fore(j, 1, m + 1) b[a[i][j]] = j;int now = 0;fore(j, 1, m + 1){ //Trie 插入 排列的逆int val =  b[j];if(!tree[now].son[val]) tree[now].son[val] = ++cnt;now = tree[now].son[val];}}fore(i, 1, n + 1){int now = 0;fore(j, 1, m + 1){ //Trie 查询最长前缀int val = a[i][j];if(!tree[now].son[val]) break;++ans[i];now = tree[now].son[val];}}fore(i, 1, n + 1) std::cout << ans[i] << " \n"[i == n];fore(i, 0, cnt + 1) //清空 Triefore(j, 1, m + 1)tree[i].son[j] = 0;cnt = 0;}return 0;
}

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

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

相关文章

CLIP网络结构解析 openai/CLIP (Contrastive Language-Image Pre-Training)

1、简单介绍 CLIP是openai公司提出的网络&#xff0c;可以处理文本和图像&#xff0c;是一个多模态网络&#xff0c;对多模态的研究具有一定的推动作用。作为学习&#xff0c;记录一下对CLIP的理解。 clip的官方网站&#xff1a; https://openai.com/research/clip clip的GitH…

优于五大先进模型,浙江大学杜震洪团队提出 GNNWLR 模型:提升成矿预测准确性

卡塔尔世界杯自 2010 年荣膺举办权&#xff0c;直至 2022 年辉煌成功举办&#xff0c;累计投入资金高达约 2,290 亿美元。相较之下&#xff0c;此前七届世界杯的总花费仅约 400 多亿美元。这场体育盛事展现出奢华无度的风采&#xff0c;归根结底源于卡塔尔这个国度的深厚底蕴。…

nginx配置多vue项目

1. 找到linux docker安装好的nginx目录文件 进入nginx内 把打包好的vue项目放在html文件下 如上 三个文件夹下对应着三个不同的vue项目 2. 配置default.conf的配置文件&#xff0c; 一个nginx配置文件可以多个项目进行代理 进入到conf 找到conf.d下面的default.conf 文件…

SV学习笔记(二)

接口 什么是接口&#xff1f; 接口 主要用作验证 &#xff0c;国外有些团队会使用sv进行设计&#xff0c;那么接口就会用作设计。验证环境中&#xff0c;接口可以 使连接变得简洁而不易出错 。interface和module的使用性质很像&#xff0c; 可以定义端口&#xff0c;也可以定…

[C/C++] -- 二叉树

1.简介 二叉树是一种每个节点最多有两个子节点的树结构&#xff0c;通常包括&#xff1a;根节点、左子树、右子树。 满二叉树&#xff1a; 如果一棵二叉树只有度为0的结点和度为2的结点&#xff0c;并且度为0的结点在同一层上&#xff0c;则这棵二叉树为满二叉树。深度为k&a…

如何备份极狐GitLab 信任域名证书

本文作者&#xff1a;徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了如何使用极狐GitLa…

WebCopilot:一款功能强大的子域名枚举和安全漏洞扫描工具

关于WebCopilot WebCopilot是一款功能强大的子域名枚举和安全漏洞扫描工具&#xff0c;该工具能够枚举目标域名下的子域名&#xff0c;并使用不同的开源工具检测目标存在的安全漏洞。 工具运行机制 WebCopilot首先会使用assetsfinder、submaster、subfinder、accumt、finddom…

华为OD机试 - 最大社交距离(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

ubuntu20.04 运行 lio-sam 流程记录

ubuntu20.04 运行 lio-sam 一、安装和编译1.1、安装 ROS11.2、安装 gtsam1.3、安装依赖1.4、下载源码1.5、修改文件1.6、编译和运行 二、官方数据集的运行2.1、casual_walk_2.bag2.2、outdoor.bag、west.bag2.3、park.bag 三、一些比较好的参考链接 记录流程&#xff0c;方便自…

【威胁情报综述阅读3】Cyber Threat Intelligence Mining for Proactive Cybersecurity Defense

【威胁情报综述阅读1】Cyber Threat Intelligence Mining for Proactive Cybersecurity Defense: A Survey and New Perspectives 写在最前面一、介绍二、网络威胁情报挖掘方法和分类A. 研究方法1&#xff09; 第 1 步 - 网络场景分析&#xff1a;2&#xff09; 第 2 步 - 数据…

Python 之 Flask 框架学习

毕业那会使用过这个轻量级的框架&#xff0c;最近再来回看一下&#xff0c;依赖相关的就不多说了&#xff0c;直接从例子开始。下面示例中的 html 模板&#xff0c;千万记得要放到 templates 目录下。 快速启动 hello world from flask import Flask, jsonify, url_forapp F…

时间管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)大学生

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读300套最新项目持续更新中..... 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含ja…

使用deepspeed小记

1. 减少显存占用的历程忠告 医学图像经常很大&#xff0c;所以训练模型有时候会有难度&#xff0c;但是现在找到了很多减少显存的方法。 不知道为什么&#xff0c;使用transformers的trainer库确确实实会减少显存的占用&#xff0c;即使没有使用deepspeed&#xff0c;占用的显…

MySQL 8.0.13安装配置教程

写个博客记录一下&#xff0c;省得下次换设备换系统还要到处翻教程&#xff0c;直接匹配自己常用的8.0.13版本 1.MySQL包解压到某个路径 2.将bin的路径加到系统环境变量Path下 3.在安装根目录下新建my.ini配置文件&#xff0c;并用编辑器写入如下数据 [mysqld] [client] port…

30. UE5 RPG GamplayAbility的配置项

在上一篇文章&#xff0c;我们介绍了如何将GA应用到角色身上的&#xff0c;接下来这篇文章&#xff0c;将主要介绍一下GA的相关配置项。 在这之前&#xff0c;再多一嘴&#xff0c;你要能激活技能&#xff0c;首先要先应用到ASC上面&#xff0c;才能够被激活。 标签 之前介绍…

【SpringBoot整合系列】SpirngBoot整合EasyExcel

目录 背景需求发展 EasyExcel官网介绍优势常用注解 SpringBoot整合EaxyExcel1.引入依赖2.实体类定义实体类代码示例注解解释 3.自定义转换器转换器代码示例涉及的枚举类型 4.Excel工具类5.简单导出接口SQL 6.简单导入接口SQL 7.复杂的导出&#xff08;合并行、合并列&#xff0…

python Flask扩展:如何查找高效开发的第三方模块(库/插件)

如何找到扩展以及使用扩展的文档 一、背景二、如何寻找框架的扩展&#xff1f;三、找到想要的扩展四、找到使用扩展的文档五、项目中实战扩展 一、背景 刚入门python的flask的框架&#xff0c;跟着文档学习了一些以后&#xff0c;想着其实在项目开发中&#xff0c;经常会用到发…

每日面经分享(Spring Boot: part3 Service层)

SpringBoot Service层的作用 a. 封装业务逻辑&#xff1a;Service层负责封装应用程序的业务逻辑。Service层是控制器&#xff08;Controller&#xff09;和数据访问对象&#xff08;DAO&#xff09;之间的中间层&#xff0c;负责处理业务规则和业务流程。通过将业务逻辑封装在S…

当面试官问你插入排序算法,你敢说自己会吗?

算法学习的重要性 在程序员的世界里&#xff0c;算法就如同一座桥梁&#xff0c;连接着问题与解决方案&#xff0c;是实现优秀程序的关键。 掌握算法&#xff0c;就能够在面对各种问题时&#xff0c;找到最合适的解决方法&#xff0c;以最少的时间和空间&#xff0c;实现最优的…

基于FPGA的SPI_FLASH程序设计

SPI_FLASH简介 spi_flash是一种通用存储器&#xff0c;也称为SPI NOR Flash或SPI Flash。它使用SPI&#xff08;Serial Peripheral Interface&#xff09;接口进行通信&#xff0c;可以通过串行方式读写数据。spi_flash的特点是工作电压低&#xff0c;体积小&#xff0c;读写速…