水题杂谈222222

news2024/9/23 7:29:59

Trie字符串统计

 思路:

Trie字符串就是把字符串像树一样存储下来

例子:

将如下字符串用trie存储

 

 然后在查找字符串的时候就顺着树查找,但是要在每个字符串的结尾位置打上标记

 



#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<stack>
#include<string>
#include<algorithm>
#include<unordered_map>
#include<map>
#include<cstring>
#include <unordered_set>
//#include<priority_queue>
#include<queue>
#include<set>
#include<stdlib.h>
#define dbug cout<<"hear!"<<endl;
#define rep(a,b,c) for(ll a=b;a<=c;a++)
#define per(a,b,c) for(ll a=b;a>=c;a--)
#define no cout<<"NO"<<endl;
#define yes cout<<"YES"<<endl;
#define endl "\n"
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
//priority_queue<int,vector<int>,greater<int> >q;
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<ll, ll> PII;
typedef pair<long double,long double> PDD;

 ll  INF = 0x3f3f3f3f;
//const ll LINF=LLONG_MAX;
ll gcdd(ll a, ll b)
{
      while(b^=a^=b^=a%=b);    
      return a;
}
// ll lcmm(ll a,ll b)
// {
//     ll ans;
//     ans=a/gcdd(a,b)*b;
//     return ans;
// }

 
//ll idx;
const ll N = 2e6+ 10;
const ll mod =998244353;
ll t,n,m,x,y,ca;
ll arr[N],brr[N],crr[N];
ll book[N];
// ll ne[N],e[N],w[N];
// ll h[N],idx;
// void add(ll a,ll b, ll c)
// {
//   e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx ++ ;
// }

int son[N][26],idx,cnt[N];
//son[][]存储子节点的位置,分支最多26条;
//cnt[]存储以某节点结尾的字符串个数(同时也起标记作用)
//idx表示当前要插入的节点是第几个,每创建一个节点值+1
void insert(string s)
{
  int p = 0;
  for(int i=0;s[i];i++)
  {
    int u = s[i] - 'a';
    if(!son[p][u]) son[p][u] = idx ++ ;//该节点不存在,创建节点
    p = son[p][u];//使“p指针”指向下一个节点
  }
  cnt[p] ++;//结束时的标记,也是记录以此节点结束的字符串个数
}

int query(string s)
{
  idx = 1;
  int p = 0;
  for(int i = 0;s[i]; i++)
  {
    int u = s[i] - 'a';
    if(!son[p][u]) return 0;//该节点不存在,即该字符串不存在
    p = son[p][u];
  }
  return cnt[p];//返回字符串出现的次数
}

void fatchuan()
{
  cin>>n;
  while(n--)
  {
    string op;
    string s;
    cin>>op>>s;
    if(op == "I") insert(s);
    else cout<<query(s)<<endl;
  }
}


int main()
{
    IOS;
    t=1;
    //scanf("%d",&t);
    //cin>>t;
    ca=1;
    while(t--)
    {
      fatchuan(); 
      ca++;
    }    
    return 0;
}

好吧其实一个map容器解决



#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<stack>
#include<string>
#include<algorithm>
#include<unordered_map>
#include<map>
#include<cstring>
#include <unordered_set>
//#include<priority_queue>
#include<queue>
#include<set>
#include<stdlib.h>
#define dbug cout<<"hear!"<<endl;
#define rep(a,b,c) for(ll a=b;a<=c;a++)
#define per(a,b,c) for(ll a=b;a>=c;a--)
#define no cout<<"NO"<<endl;
#define yes cout<<"YES"<<endl;
#define endl "\n"
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
//priority_queue<int,vector<int>,greater<int> >q;
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<ll, ll> PII;
typedef pair<long double,long double> PDD;

 ll  INF = 0x3f3f3f3f;
//const ll LINF=LLONG_MAX;
ll gcdd(ll a, ll b)
{
      while(b^=a^=b^=a%=b);    
      return a;
}
// ll lcmm(ll a,ll b)
// {
//     ll ans;
//     ans=a/gcdd(a,b)*b;
//     return ans;
// }

 
//ll idx;
const ll N = 2e6+ 10;
const ll mod =998244353;
ll t,n,m,x,y,ca;
ll arr[N],brr[N],crr[N];
ll book[N];
// ll ne[N],e[N],w[N];
// ll h[N],idx;
// void add(ll a,ll b, ll c)
// {
//   e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx ++ ;
// }


void fatchuan()
{
  cin>>n;
  map<string ,int>mp;
  while(n--)
  {
    string op;
    string s;
    cin>>op>>s;
    if(op == "I") mp[s] ++;
    else cout<<mp[s]<<endl;
  }
}


int main()
{
    IOS;
    t=1;
    //scanf("%d",&t);
    //cin>>t;
    ca=1;
    while(t--)
    {
      fatchuan(); 
      ca++;
    }    
    return 0;
}

                                                                                                                                                                         

n-皇后问题(dfs复习)

 

 

#include<iostream>
#include<cstring>
using namespace std;
const int N=30;
int n;
char m[N][N];
int vis[N],dg[N],udg[N],ha[N];
void dfs(int x,int y ,int q)
{
	if(y==n)y=0,x++;
	if(x==n)
	{
		if(q==n)
		{
			
		
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<n;j++)
			{
				cout<<m[i][j];
			}cout<<endl;
		}cout<<endl;
		}
		return;
	}
	dfs(x,y+1,q);
	if(!vis[x] && !ha[y] && !dg[x+y] && !udg[n-x+y])
	{
		m[x][y]='Q';
		ha[y]=dg[x+y]=udg[n-x+y]=vis[x]=1;
		dfs(x,y+1,q+1);
		m[x][y]='.';
		ha[y]=dg[x+y]=udg[n-x+y]=vis[x]=0;
	}
}
int main()
{
	cin>>n;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			m[i][j]='.';
		 } 
	}
	dfs(0,0,0);
};

                                                                                                                                                                                        

八数码(bfs复习)

在一个 3×3 的网格中,1∼8 这 8 个数字和一个 x 恰好不重不漏地分布在这 3×3 的网格中。

例如:

1 2 3
x 4 6
7 5 8

在游戏过程中,可以把 x 与其上、下、左、右四个方向之一的数字交换(如果存在)。

我们的目的是通过交换,使得网格变为如下排列(称为正确排列):

1 2 3
4 5 6
7 8 x

例如,示例中图形就可以通过让 x 先后与右、下、右三个方向的数字交换成功得到正确排列。

交换过程如下:

1 2 3   1 2 3   1 2 3   1 2 3
x 4 6   4 x 6   4 5 6   4 5 6
7 5 8   7 5 8   7 x 8   7 8 x

现在,给你一个初始网格,请你求出得到正确排列至少需要进行多少次交换。

输入格式

输入占一行,将 3×3 的初始网格描绘出来。

例如,如果初始网格如下所示:

1 2 3 
x 4 6 
7 5 8 

则输入为:1 2 3 x 4 6 7 5 8

输出格式

输出占一行,包含一个整数,表示最少交换次数。

如果不存在解决方案,则输出 −1。

输入样例:

2 3 4 1 5 x 7 6 8

输出样例

19

题意: 

得到一个输入之后,将“x”当作空格,可以与四周数字进行交换,最终使字符串变成“12345678x”,类似于小时候玩的益智游戏“华容道”,但这题神奇就神奇在,题目给的是一维的,要在换位过程中变成二维的。

#include<cstring>
#include<iostream>
#include<cstdio>
#include<string.h>
#include<algorithm>
#include<map>
#include<unordered_map>
#include<string>
#include<stack>
#include<queue>
#include<set>
#include<stdlib.h>
using namespace std;
typedef long long ll;
int nx[] = { 0,1,0,-1 };
int ny[] = { 1,0,-1,0 };
const int N = 35;
void bfs(string s)
{
	int flag2 = 0;//标记能不能达到目的
	queue<string>six;
	unordered_map<string, int >d;//简单的来说是比map快的map(我是这么理解的有错误的话,希望大佬们能纠正我)
	d[s] = 0;
	six.push(s);
	string end = "12345678x";//目的字符串
	while (!six.empty())
	{
		string A;
		A = six.front();
		six.pop();
		if (A == end)
		{
			cout << d[A];
			flag2 =1;
			break;
		}
		int step = d[A];
		int flag = A.find("x");//找到x在字符串的位置
		for (int i = 0;i < 4;i++)
		{
			int x = flag / 3 + nx[i];//这里就是一维转二维了
			int y = flag % 3 + ny[i];
			if (x >= 0 && x < 3 && y >= 0 && y < 3)
			{
				swap(A[flag], A[x*3 + y]);
				cout << A << endl;
				if (!d.count(A))
				{
					d[A] = step + 1;
					six.push(A);
				}
				swap(A[flag], A[x * 3 + y]);//交换完要交换回去,因为我没有额外定义专门用来交换的数组
				cout << A << endl;
			}
		}
	}
	if(flag2==0)
	cout << -1;
}
 
 
int main()
{
	string s;
	for (int i = 0;i < 9;i++)
	{
		char a;
		cin >> a;
		s += a;
	}//由于输入数据带空格,所以这么输入的
	//cout << s;
	bfs(s);
}

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

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

相关文章

23款奔驰S450 4MATIC更换原厂流星雨智能数字大灯,让智能照亮您前行的路

凭借智能数字大灯 (DIGITAL LIGHT)&#xff0c;您可体验根据其他道路使用者和周围环境进行优化调节的理想照明条件。这款包含130万像素模块大灯&#xff0c;进一步扩展了几何多光束 LED 大灯的功能。其高分辨率的照明可有针对性地点亮各个区域。解锁车辆时&#xff0c;大灯将通…

小驰私房菜_16_高通设备开机模式

[Android基础] [qcom开机模式] 用的比较多的可能是 adb reboot bootloader 和 adb reboot edl。 这2个命令都是刷机的时候会用到。 adb reboot bootloader 是进入bootloader模式&#xff0c;通过fastboot 命令来刷img文件。 adb reboot edl 是进入紧急下载模式&#xff0c;进而…

Java POI (3)—— Excel单元格复制过程中公式不生效的问题

一、出现问题的原因 在实现Excel中单元格的复制功能实现上&#xff0c;之前的代码是这样写的 /*** copyCellValue() 方法用于将源单元格的值复制到目标单元格中。* param sourceCell 是源单元格对象* param destCell 是目标单元格对象*/public static void copyCellValue(Cel…

JVM堆参数调优

1、java7 2、java8之后jvm变化 3、默认内存大小 public static void main(String[] args){ long maxMemory Runtime.getRuntime().maxMemory() ;//返回 Java 虚拟机试图使用的最大内存量。 long totalMemory Runtime.getRuntime().totalMemory() ;//返回 Java 虚拟机中的内存…

docker Alpine镜像介绍(基础镜像)

文章目录 Alpine镜像特点开发/维护者使用案例dockerfile 使用方法 https://hub.docker.com/_/alpine https://github.com/alpinejs/alpine Alpine镜像 Alpine镜像是一个基于Alpine Linux发行版构建的Docker镜像。Alpine Linux是一个轻量级的Linux发行版&#xff0c;它的目标…

H3C交换机在地址池下如何进行IP和MAC地址绑定

环境&#xff1a; H3C S6520-26Q-SI version 7.1.070, Release 6326 问题描述&#xff1a; H3C交换机在地址池下如何进行IP和MAC地址绑定 将MAC地址为0000-e03f-0305的PC机与IP地址10.1.1.1绑定&#xff0c;掩码为255.255.255.0 解决方案&#xff1a; 1.进入地址池视图 …

【Java可执行命令】(一)编译工具javac:从源代码到字节码,深入解析Java编译工具 javac ~

Java可执行命令详解之javac 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 语法格式3.1.1 可选参数&#xff1a;-d3.1.2 可选参数&#xff1a;-classpath3.1.3 可选参数&#xff1a;-sourcepath3.1.4 可选参数&#xff1a;-target3.1.5 可选参数&#xff1a;-g 4️⃣ 应用场景5️⃣…

网络原理之传输层与网络层重点协议

目录 传输层重点协议 TCP协议 TCP协议段格式 TCP原理 确认应答机制&#xff08;安全机制&#xff09; 超时重传机制&#xff08;安全机制&#xff09; 连接管理机制&#xff08;安全机制&#xff09; 滑动窗口&#xff08;效率机制&#xff09; 流量控制&#xff08;安…

力扣 257. 二叉树的所有路径

题目来源&#xff1a;https://leetcode.cn/problems/binary-tree-paths/description/ C题解1&#xff1a;使用递归&#xff0c;声明了全局变量result&#xff0c;遇到叶子节点就将字符串添加到result中。 递归三步法&#xff1a; 1. 确认传入参数&#xff1a;当前节点已有路径…

Java 泛型进阶

目录 一、什么是泛型 二、引出泛型 1、语法 四、泛型类的使用 1、语法 2、示例 3、类型推导(Type Inference) 4、裸类型(Raw Type) &#xff08;了解&#xff09; &#xff08;1&#xff09;说明 五、泛型如何编译的 1、擦除机制 2、为什么不能实例化泛型类型数组 …

Nginx Rewrite的应用

目录 一、Nginx Rewrite 二、Rewrite的功能 1.Rewrite 跳转场景 2.Rewrite 跳转实现 3.Rewrite 实际场景 4.Rewrite 正则表达式 5.Rewrite 命令/语法格式 6.location 分类 7.location 优先级 8.Rewrite和location比较 9.根据以上了解&#xff0c;小案例来操…

【STM32】F103(64K/128K Flash)外设概述

本文介绍的是STM32F103 中等容量产品&#xff08;STM32F103x8xx和STM32F103xBxx&#xff09;的硬件数据&#xff0c;即64KB或128KB Flash&#xff0c;20KB SRAM。 ST官网资料&#xff1a;https://www.st.com/zh/microcontrollers-microprocessors/stm32f103.html ST官方的中等…

Scala中的隐式参数、隐式函数和隐式类

使用 implicit 修饰的内容是隐式内容, 隐式的特点就是遇到适应的类型会自动的应用。隐式可以使得静态类型动态化&#xff0c;为现有类库添加功能&#xff0c;隐式的代理增强一个类或者一个方法。 隐式转化的时机 当方法中的参数的类型与目标类型不一致时当对象调用所在类中不…

HOT18-矩阵置零

leetcode原题链接: 矩阵置零 题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,…

【Flutter】Flutter Redux 入门:解决状态管理的问题

文章目录 一、 前言二、 Flutter Redux 简介1. 什么是 Redux2. 为什么需要 Redux3. Flutter Redux 的作用 三、 Flutter Redux 的基本使用1. 安装和配置2. 创建 Store3. 使用 StoreProvider 四、 Flutter Redux 的基础示例1. 创建一个简单的计数器应用2. 解析代码和说明 五、 版…

解决npm WARN deprecated uuid@3.4.0: Please upgrade to version 7 or higher

一、问题 环境 系统&#xff1a;centos 7 node &#xff1a;v18.16.1 npm&#xff1a;9.5.1 安装pm2 npm install -g pm2提示报错&#xff1a; npm WARN deprecated uuid3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certai…

记录react 视频和 预览拖动

一、react 视频 ##1、循环播放 import React, { useEffect, useState, useRef } from "react"; const videoRef useRef(null); const showVideoClass { display: "block", width: "100%", height: "100%" } const hindVideoClass …

Zookeeper的应用场景

一、Zookeeper的应用场景包括&#xff1a; 配置中心&#xff1a;Zookeeper可以用来存储和管理配置信息&#xff0c;例如集群中的机器配置、服务地址配置等。通过Zookeeper&#xff0c;可以将配置信息统一管理&#xff0c;同时实现动态加载和更新。统一命名服务&#xff1a;Zoo…

Ubuntu 20.04.02 LTS安装virtualbox7.0

ubuntu22.04的软件仓库也有virtualbox&#xff0c;不过版本较老。 使用安装命令&#xff1a;sudo apt install virtualbox 如果想要安装最新版&#xff0c;那么需要去官网下载deb包或者使用官方的仓库。 这里采用安装Oracle官方仓库的方法。 执行如下命令&#xff1a; wge…

fastadmin 点击获取当前行数据

fastadmin 点击获取当前行数据 // 先获取当前id // 使用方法的语法&#xff1a;$(#table).bootstrapTable(method, parameter);$(document).on("click",".detailtips",function(){var ids$(this).attr("id");var rows$("#table").boo…