当前位置: 首页 > news >正文

学校网站建设报价单山西seo优化公司

学校网站建设报价单,山西seo优化公司,加拿大服务器做网站,在线视频网站a做免费下载目录 字典树模板 1、插入操作 2、查询操作 143. 最大异或对 - trie 二进制 3485. 最大异或和 - 前缀和Trie滑动窗口 字典树模板 活动 - AcWing 字典树:高效存储和查找字符串集合的数据结构 son[节点1地址][值]节点2地址 —— 节点1的子节点为节点2cnt[节点地…

目录

字典树模板

1、插入操作

2、查询操作

143. 最大异或对 - trie + 二进制

3485. 最大异或和 - 前缀和+Trie+滑动窗口


字典树模板

活动 - AcWing

字典树:高效存储和查找字符串集合的数据结构

  • son[节点1地址][值]=节点2地址 —— 节点1的子节点为节点2
  • cnt[节点地址] —— 记录以该节点地址为结尾的字符串个数

1、插入操作

static void insert(String s)
{int p=0;for(char x:s.toCharArray()){int u=x-'a';if(son[p][u]==0) son[p][u]=++idx; //如果节点不存在 创建节点p=son[p][u]; //走到p的子节点}cnt[p]++; //把这一串字符插入后 记录以最后此节点为标记的字符串数
}

2、查询操作

static int query(String s)
{int p=0;for(char x:s.toCharArray()){int u=x-'a';if(son[p][u]==0) return 0; //有一个节点不存在,说明没有这个字符串p=son[p][u];}return cnt[p];
}
/**道阻且长,行则将至*author:Roye_ack
*/
import java.util.*;
import java.io.*;
import java.math.*;class Main
{static int N=100010;static int[] cnt=new int[N];static int[][] son=new int[N][26]; //son[节点1][值]=节点2  节点1的子节点是节点2static int idx=0;static void insert(String s){int p=0;for(char x:s.toCharArray()){int u=x-'a';if(son[p][u]==0) son[p][u]=++idx; //如果节点不存在 创建节点p=son[p][u]; //走到p的子节点}cnt[p]++; //把这一串字符插入后 记录以最后此节点为标记的字符串数}static int query(String s){int p=0;for(char x:s.toCharArray()){int u=x-'a';if(son[p][u]==0) return 0; //有一个节点不存在,说明没有这个字符串p=son[p][u];}return cnt[p];}public static void main(String[] args) throws IOException{PrintWriter wt=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));int n=rd.nextInt();while(n-->0){String[] s=rd.nextLine().split(" ");if(s[0].equals("I")) insert(s[1]);else wt.println(query(s[1]));}wt.flush();}static class rd{static BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));static StringTokenizer tk=new StringTokenizer("");static String nextLine() throws IOException{return bf.readLine();}static String next() throws IOException{while(!tk.hasMoreTokens()) tk=new StringTokenizer(bf.readLine());return tk.nextToken();}static int nextInt() throws IOException{return Integer.parseInt(next());}static double nextDouble() throws IOException{return Double.parseDouble(next());}static long nextLong() throws IOException{return Long.parseLong(next());}static BigInteger nextBig() throws IOException{BigInteger d=new BigInteger(rd.nextLine());return d;}}
}

143. 最大异或对 - trie + 二进制

活动 - AcWing

题目:

在给定的N个整数 A1,A2.......AN中选出两个进行xor(异或)运算,得到的结果最大是多少?

思路:

将每个数以二进制方式存入 Trie 树

每一次检索,我们都走与当前 ai 这一位相反的位置走,也就是让异或值最大

如果没有相反位置的路可以走的话,那么就走相同位置的路

/**道阻且长,行则将至*author:Roye_ack
*/
import java.util.*;
import java.io.*;
import java.math.*;class Main
{static int N=100010,M=31*N;static int[] a=new int[N];static int[][] son=new int[M][2]; //son[节点1][值]=节点2  节点1的子节点是节点2static int idx=0;static void insert(int x){int p=0;for(int i=30;i>=0;i--) //最大31位,0~30位{int u=x>>i&1;if(son[p][u]==0) son[p][u]=++idx;p=son[p][u];}}static int find(int x){int p=0,res=0;for(int i=30;i>=0;i--){int u=x>>i&1;if(son[p][u^1]!=0) //如果当前层有对应不同的数,走不同的分支{p=son[p][u^1];res=res*2+1; //该位异或后为1,将其左移i位加到res中}else {p=son[p][u];res=res*2+0;}}return res;}public static void main(String[] args) throws IOException{PrintWriter wt=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));int n=rd.nextInt();for(int i=0;i<n;i++){a[i]=rd.nextInt();insert(a[i]);}int res=0;for(int i=0;i<n;i++) res=Math.max(res,find(a[i]));wt.print(res);wt.flush();}static class rd{static BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));static StringTokenizer tk=new StringTokenizer("");static String nextLine() throws IOException{return bf.readLine();}static String next() throws IOException{while(!tk.hasMoreTokens()) tk=new StringTokenizer(bf.readLine());return tk.nextToken();}static int nextInt() throws IOException{return Integer.parseInt(next());}static double nextDouble() throws IOException{return Double.parseDouble(next());}static long nextLong() throws IOException{return Long.parseLong(next());}static BigInteger nextBig() throws IOException{BigInteger d=new BigInteger(rd.nextLine());return d;}}
}

 

3485. 最大异或和 - 前缀和+Trie+滑动窗口

3485. 最大异或和 - AcWing题库

题目:

思路:

本题要求异或和的最大值

求某一段区间的异或和可以求前缀异或和,也就是S[r]^S[l-1],因为a^x^x=a

因此题目就转化为求异或前缀和S[1]~S[N]中选一个最大的异或对

维护一个长度不超过m的滑动窗口,把窗口外的数从字典树删除,删除操作只要让cnt--就可以

长度不超过m的连续子数组,我们可以枚举右端点s[i],在合法区间内求最大的另一异或数

最大异或对模板

  • 想要异或结果最大,则每一位都要尽量不同,这样异或结果每一位1的个数才会最多
  • 将每个数字的二进制数(01串),从高位到低位存到trie中
  • 对于每一位ai,都尽量往跟他相反的方向走(比如ai为0则走1分支,1则走0分支),如果实在没有相反的分支,则顺着走
/**道阻且长,行则将至*author:Roye_ack
*/
import java.util.*;
import java.io.*;
import java.math.*;class Main
{static int N=3100010;static int[] s=new int[N],cnt=new int[N]; //cnt记录数的出现次数static int[][] tr=new int[N][2]; //son[节点1][值]=节点2  节点1的子节点是节点2static int idx=0;static void insert(int x,int num){int p=0;for(int i=30;i>=0;i--){int u=x>>i&1;if(tr[p][u]==0) tr[p][u]=++idx;p=tr[p][u];cnt[p]+=num;}}static int find(int x){int p=0,res=0;for(int i=30;i>=0;i--){int u=x>>i&1;if(cnt[tr[p][u^1]]!=0){p=tr[p][u^1];res=res*2+1;}else{p=tr[p][u];res*=2;}}return res;}public static void main(String[] args) throws IOException{PrintWriter wt=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));int n=rd.nextInt(),m=rd.nextInt();for(int i=1;i<=n;i++){int x=rd.nextInt();s[i]=s[i-1]^x;}int res=0;insert(s[0],1); //刚开始插入s0for(int i=1;i<=n;i++) //枚举右端点{if(i>m) insert(s[i-m-1],-1); //删掉不在区间内的左端点(合法区间是[i-m,i])res=Math.max(res,find(s[i]));insert(s[i],1);}wt.print(res);wt.flush();}static class rd{static BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));static StringTokenizer tk=new StringTokenizer("");static String nextLine() throws IOException{return bf.readLine();}static String next() throws IOException{while(!tk.hasMoreTokens()) tk=new StringTokenizer(bf.readLine());return tk.nextToken();}static int nextInt() throws IOException{return Integer.parseInt(next());}static double nextDouble() throws IOException{return Double.parseDouble(next());}static long nextLong() throws IOException{return Long.parseLong(next());}static BigInteger nextBig() throws IOException{BigInteger d=new BigInteger(rd.nextLine());return d;}}
}

http://www.yidumall.com/news/84646.html

相关文章:

  • 视频怎样连接到wordpress针对百度关键词策划和seo的优化
  • 自己做的网站怎么推广老客外链
  • 南宁百度网站设计zac seo博客
  • 网站开发语言哪个好北京百度推广优化
  • 网站流量平台张家界百度seo
  • 东莞专业的网站建设网络推广怎样和政府交换友链
  • 静安区品牌网站建设市场营销方案怎么写
  • 陈光锋网站运营推广新动向推广app佣金平台正规
  • 记事本做网站文字居中网站策划方案范文
  • 跨境电商 网站开发福建省人民政府
  • 免费行情网站app页面网上怎么找人去推广广告
  • 福州网站制作怎样百度推广代理商与总公司的区别
  • 做网站的流量怎么算钱模板网站免费
  • 动态网站演示网络软文范例
  • 做网站建设的电话销售网站案例分析
  • 怎么做网站webseo点击优化
  • 做展示型网站农业推广
  • 怎么做 代刷网站2023上海又出现疫情了
  • 中山顺德网站建设十大免费软文推广平台
  • 做本地团购网站统计站老站长推荐草莓
  • 做瞹免费视频网站百度seo在哪里
  • 美女做暧暧免费视频网站平台推广策划方案
  • 东营做网站seo口碑营销的前提及好处有哪些?
  • 哪些网站可以做帮助文档dz论坛如何seo
  • 东营市做网站网址大全是ie浏览器吗
  • 网站文章分类win7优化软件
  • 公司建网无锡网站制作优化
  • 网页制作创建站点网络推广渠道公司
  • 编程除了做网站还能干什么推广普通话手抄报图片大全
  • wordpress 转义seo教学网seo