trie树

字典树:
普通字典树用于维护字符串相关信息。

Edu 159 E. Collapsing Strings

在这里插入图片描述
c函数实质上就是求a和b的长度之和减去a的最长后缀与b的最长前缀的长度乘2.
那么我们可以把所有的字符先放入trie树,然后在查询的时候进行反转即可。
对于查询有两种办法,对于字符串a而言,我们对其进行反转后,就是在字典树中查询与其匹配的最长公共前缀的长度与个数,长度我们开一个变量进行记录,至于个数,对于长度为len的节点,其最长公共前缀的个数为当前节点数目减去其子节点数目。
再者我们可以对于字符串a,我们删除其第一个字母所花费的代价即为以第一个字母为结尾的字符串个数,以此类推。

#include <bits/stdc++.h>using namespace std;
const int N = 1e6 + 5;
typedef long long ll;
typedef pair<ll, ll> pll;
typedef array<int, 5> ar;
int mod = 1e9+7;
// const int maxv = 4e6 + 5;
// #define endl "\n"int son[N][30],cnt[N],tot=1;
ll n;
ll sum=0;void add(string s)
{int p=1;for(auto x: s){int u=x-'a';if(!son[p][u]) son[p][u]=++tot;p=son[p][u];cnt[p]++;}
}ll query(string s)
{int p=1,len=0;ll res=n*s.size()+sum;for(auto x: s){int u=x-'a';if(!son[p][u]) break;ll pre=cnt[p]-cnt[son[p][u]];res-=len*pre*2;len++;p=son[p][u];}res-=cnt[p]*len*2;return res;
}void solve()
{tot=1,sum=0;cin>>n;vector<string> a(n+5);for(int i=1;i<=n;i++){cin>>a[i];add(a[i]);sum+=a[i].size();}ll ans=0;for(int i=1;i<=n;i++){reverse(a[i].begin(),a[i].end());ans+=query(a[i]);}cout<<ans<<endl;
} int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t;t=1;// cin>>t;while(t--){solve();}system("pause");return 0;
}

牛客寒假训练营2 C.Tokitsukaze and Min-Max XOR

在这里插入图片描述
思路,对于b数组的子序列,我们取其中的最大值和最小值,判断其异或值是否合法,那么对于一个序列而言,我们关心的只有其最大值和最小值,即其他的数都无关紧要。所以先对数组进行排序,然后对于每一个数,我们将其看作最大值,那么对于其前面的数而言,我们看其中有多少最小值是合法的,那么对于当前的位置 i i i,其前面确定的合法的最小值位置 j j j,那么对于中间的 j − i − 1 j-i-1 ji1个数而言,我们共有 2 j − i − 1 2^{j-i-1} 2ji1种选择。
再谈及对于最小值的确定,两个数异或的操作,我们自然就可以想到使用01tire树进行维护。
再考虑对于答案的贡献,对于 a j a_j aj,其贡献为 2 j − i − 1 2^{j-i-1} 2ji1,我们将这个式子进行变形,即为 2 j 2 i − 1 \frac{2^j}{2^{i-1}} 2i12j,所以我们每个点的价值为 1 2 i − 1 \frac{1}{2^{i-1}} 2i11,我们用逆元进行储存,最后得到总的贡献为 1 + 2 i − 1 ⋅ ∑ v j 1+2^{i-1}\cdot\sum v_j 1+2i1vj

#include <bits/stdc++.h>using namespace std;
const int N = 2e5 + 5;
typedef long long ll;
typedef pair<ll, ll> pll;
typedef array<int, 3> ar;
int mod = 1e9+7;
// const int maxv = 4e6 + 5;
#define endl "\n"int n,k;
int son[30*N][2],cnt[30*N],tot=1;//初始节点赋值为1,若赋值为0,且后续不加判断,就会进入空节点,因为并非所有的节点都存在ll qmi(ll a,ll b,ll c)
{ll res=1;while(b){if(b%2){res=res*a%c;}b>>=1;a=a*a%c;}return res;
}
ll inv(int x)
{return qmi(x,mod-2,mod);
}void add(int x,int v)
{int p=1;for(int i=31;i>=0;i--){int u=x>>i&1;if(!son[p][u]) son[p][u]=++tot;p=son[p][u];cnt[p]=(cnt[p]+v)%mod;}
}ll query(int x)
{int p=1,res=0;for(int i=31;i>=0;i--){int u=x>>i&1;if(k>>i&1){//如果当前位为1,因为u^u=0,所以保证了当前值一定会小于k,所以加上u这一边的贡献,然后走u^1那条路即可res=(res+cnt[son[p][u]])%mod;p=son[p][u^1];}else{//如果当前位为0,因为u^u=0,因为无法确定后续位,那么接着往下走即可。p=son[p][u];}}res=(res+cnt[p])%mod;return res;
}void solve()
{for(int i=1;i<=tot;i++){for(int j=0;j<=1;j++){son[i][j]=0;}}for(int i=1;i<=tot;i++) cnt[i]=0;tot=1;cin>>n>>k;vector<int> a(n+5);for(int i=1;i<=n;i++){cin>>a[i];}sort(a.begin()+1,a.begin()+1+n);ll ans=1;for(int i=2;i<=n;i++){ll res=1;add(a[i-1],inv(qmi(2,i-1,mod)));res=(res+query(a[i])*qmi(2,i-1,mod))%mod;ans=(ans+res)%mod;}cout<<ans<<endl;} int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t;t=1;cin>>t;while(t--){solve();}system("pause");return 0;
}

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

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

相关文章

kaggle叶子分类比赛(易理解)

说实话网上很多关于叶子分类比赛的代码能取得的成绩都很好,但对于我这个业余人员太专业了&#xff0c;而且很多文章都有自己的想法&#xff0c;这让我这个仿写沐神代码的小菜鸡甚是头痛。 但好在我还是完成了&#xff0c;虽然结果并不是很好&#xff0c;但是如果跟着沐神走的同…

为什么跑腿越来越受到年轻人的青睐

跑腿服务越来越受到年轻人的青睐&#xff0c;主要源于以下几个方面的原因&#xff1a; 1. 便捷快速&#xff1a;在快节奏的现代生活中&#xff0c;年轻人追求的是效率和速度。跑腿服务提供了一种即时、便捷的解决方案&#xff0c;使他们能够在繁忙的生活和工作中节省时间和精力…

VS Code中PlatformIO IDE的安装并开发Arduino

VS Code中PlatformIO IDE的安装并开发Arduino VS Code的安装 略 PlatformIO IDE的安装 PlatformIO IDE是是什么 PlatformIO IDE 是一个基于开源的跨平台集成开发环境&#xff08;IDE&#xff09;&#xff0c;专门用于嵌入式系统和物联网&#xff08;IoT&#xff09;开发。…

C语言 函数概述

好 接下来 我们来讲函数 构建C程序的最佳方式 就是模块化程序设计 C语言中 最基本的程序模块被称为 函数 所以 这个知识点的重要性不言而喻 这里 我们讲个故事 诸葛亮六出祁山时 为了逼司马懿出战 派人送给力司马懿一件女人衣服 司马懿只是为使者 诸葛亮的饮食起居 使者感叹…

适合小白使用的编译器(c语言和Java编译器专属篇)

本节课主要讲如何安装适合编程小白的编译器 废话不多说&#xff0c;我们现在开始 c/c篇 首先&#xff0c;进入edge浏览器&#xff0c;在搜索框输入visual studio &#xff0c;找到带我画圈的图标&#xff0c;点击downloads 找到community版&#xff08;社区版&#xff09;的下…

简易录制视频做3D高斯

系统环境 ubuntu20 &#xff0c;cuda11.8&#xff0c;anaconda配置好了3D高斯的环境。 具体参考3D高斯环境配置&#xff1a;https://blog.csdn.net/Son_of_the_Bronx/article/details/138527329?spm1001.2014.3001.5501 colmap安装&#xff1a;https://blog.csdn.net/Son_of…

最后一块石头的重量 II ,目标和,一和0

最后一块石头的重量 II&#xff08;0-1背包问题 将石头尽可能分为两堆重量一样的&#xff0c;进行相撞则为0 class Solution {public int lastStoneWeightII(int[] stones) {int sum0;for(int x:stones){sumx;}int targetsum/2;int[] dpnew int[target1];//dp[j]表示最大石堆的…

分享5款对工作学习有帮助的效率软件

​ 今天再来推荐5个超级好用的效率软件&#xff0c;无论是对你的学习还是办公都能有所帮助&#xff0c;每个都堪称神器中的神器&#xff0c;用完后觉得不好用你找我。 1.文件复制——ClipClip ​ ClipClip是一款功能强大、操作简便的文件复制与管理软件。它改变了传统的复制粘…

Python根据预设txt生成“你画我猜”题目PPT(素拓活动小工具)

Python根据预设txt生成“你画我猜”题目PPT&#xff08;素拓活动小工具&#xff09; 场景来源 去年单位内部的一次素拓活动&#xff0c;分工负责策划设置其中的“你画我猜”环节&#xff0c;网络上搜集到题目文字后&#xff0c;想着如何快速做成对应一页一页的PPT。第一时间想…

java入门详细教程——day01

目录 1. Java入门 1.1 Java是什么&#xff1f; 1.2 Java语言的历史 1.3 Java语言的分类 1.4 Java语言的特点 1.4.1 先编译再解释运行 1.4.2 跨平台 1.5 JRE和JDK&#xff08;记忆&#xff09; 1.6 JDK的下载和安装&#xff08;应用&#xff09; 1.6.1 下载 1.6.2 安…

SAP 【MM】移动类型的科目确定<转载>

原文链接&#xff1a;https://blog.csdn.net/zhongguomao/article/details/134387102 移动类型的科目确定 SAP中支持控制不同移动类型所确定的总分类帐科目和账户分配&#xff0c;同时也支持控制用户能否改变总分类帐科目和账户分配默认值。 1、控制能否手动输入总分类帐科目…

Golang | Leetcode Golang题解之第74题搜索二维矩阵

题目&#xff1a; 题解&#xff1a; func searchMatrix(matrix [][]int, target int) bool {m, n : len(matrix), len(matrix[0])i : sort.Search(m*n, func(i int) bool { return matrix[i/n][i%n] > target })return i < m*n && matrix[i/n][i%n] target }

一起刷C语言菜鸟教程100题(15-26含解析)

五一过的好快&#xff0c;五天假期说没就没&#xff0c;因为一些事情耽搁到现在&#xff0c;不过还是要继续学习的&#xff0c;之后就照常更新&#xff0c;先说一下&#xff0c;这个100题是菜鸟教程里面的&#xff0c;但是有一些题&#xff0c;我加入了自己的理解&#xff0c;甚…

责任链模式和观察者模式

1、责任链模式 1.1 概述 在现实生活中&#xff0c;常常会出现这样的事例&#xff1a;一个请求有多个对象可以处理&#xff0c;但每个对象的处理条件或权限不同。例如&#xff0c;公司员工请假&#xff0c;可批假的领导有部门负责人、副总经理、总经理等&#xff0c;但每个领导…

第80天:WAF 攻防-漏洞利用HPP 污染分块传输垃圾数据

案例一&#xff1a;安全狗-SQL 注入-知识点 正常访问会被拦截 like绕过 对比成功&#xff0c;正常返回 对比失败&#xff0c;不返回 post绕过 这里需要支持post注入。这里是我自己改的REQUEST 这里其实安全狗可以开启post验证&#xff0c;看别人知不知道能开启了 过滤了 模拟…

贪心算法应用例题

最优装载问题 #include <stdio.h> #include <algorithm>//排序int main() {int data[] { 8,20,5,80,3,420,14,330,70 };//物体重量int max 500;//船容最大总重量int count sizeof(data) / sizeof(data[0]);//物体数量std::sort(data, data count);//排序,排完数…

荟敏堂·中医优势专科建设新质生产力发展论坛在京召开

原题&#xff1a;《荟敏堂中医优势专科建设新质生产力发展论坛在京召开——周超凡中医治则学思想传承研讨会成功举办》 会议现场照片 仟江水商业电讯&#xff08;5月8日 北京 委托发布&#xff09;日前&#xff0c;周超凡中医治则学思想传承研讨会暨中医优势专科建设新质生产力…

QT实现Home框架的两种方式

在触摸屏开发QT界面一般都是一个Home页面&#xff0c;然后button触发进入子页面显示&#xff0c;下面介绍这个home框架实现的两种方式&#xff1a; 1.方式一&#xff1a;用stackedWidget实现 &#xff08;1&#xff09;StackedWidget控件在Qt框架中是一个用于管理多个子窗口或…

数据挖掘流程是怎样的?数据挖掘平台基本功能有哪些?

数据挖掘是从大量的、不完全的、有噪声的、模糊的、随机的数据中提取隐含在其中的、人们事先不知道的、但又是潜在有用的信息和知识的过程。 数据挖掘的流程是&#xff1a; 清晰地定义出业务问题&#xff0c;确定数据挖掘的目的。 数据准备: 数据准备包括&am…

记一次java进程频繁挂掉问题排查修复

前言 最近业务部门有个java服务进程会突然无缘无故的挂掉&#xff0c;然后这个服务会产生一堆类似hs_err_pid19287.log这样的日志。业务部门负责人就把hs_err_pidxxx的日志发给我&#xff0c;让我帮忙看下问题。本文就来回顾一下&#xff0c;我是如何帮业务部门进行问题排查 …