字典树模板+位运算

P3879 [TJOI2010] 阅读理解 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

trie树板子题,稍微有一丢丢不一样,套用字典树模板稍加修改就能过

手搓字典树代码:

char ch[1010][26], cnt[1010], idx;
void insert(string s)//插入
{int p = 0;for (int i = 1; s[i]; i++){int j = s[i] - 'a';if (!ch[p][j]){ch[p][j] = ++idx;}p = ch[p][j];}cnt[p]++;
}
int query(string s)//查询
{int p = 0;for (int i = 1; s[i]; i++){int j = s[i] - 'a';if (!ch[p][j]){return 0;}p = ch[p][j];}return cnt[p];
}

题解代码:

#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<math.h>
using namespace std;
typedef long long ll;
char s[50010];
char ch[500010][26], idx;
char w[500010][1010];
int n, m;
inline int read()
{int k = 0, f = 1; char ch = getchar();while (ch < '0' || ch>'9'){if (ch == '-')f = -1;ch = getchar();}while (ch >= '0' && ch <= '9'){k = k * 10 + ch - '0';ch = getchar();}return k * f;
}
void insert(int x)
{scanf("%s", s + 1);int l = strlen(s + 1);int p = 0;for (int i = 1; i<=l; i++){int j = s[i] - 'a';if (!ch[p][j]){ch[p][j] = idx++;}p = ch[p][j];}w[p][x] = 1;
}
void check()
{scanf("%s", s + 1);int l = strlen(s + 1);int p = 0;int flag = 1;for (int i = 1; i<=l; i++){int j = s[i] - 'a';if (!ch[p][j]){flag = 0;break;}p = ch[p][j];}if (flag){for (int i = 1; i <= n; i++){if (w[p][i]){cout << i << " ";}}cout << endl;}
}
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);n = read();for (int i = 1; i <= n; i++){int x = read();for (int j = 1; j <= x; j++){insert(i);}}m = read();for (int i = 1; i <= m; i++){check();}return 0;
}

位运算:

左移:

1<<n=2^n,n<<1=2n

右移:

n>>1=n/2

取出n在二进制下的第k位:(n>>k)&1

取出n在二进制下的第0~k-1位(后k位):n&((1<<k)-1)

把n在二进制下的第k位取反:n xor(1<<k)

对n在二进制下的第k位赋值1:n|(1<<k)

对n在二进制下的第k位赋值0:n&(~(1<<k))

来两道位运算的题目练练手(算法竞赛进阶指南)

P1226 【模板】快速幂 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路:

解决这道题有两种方法:

1.分治思想:n为偶数时把2^n分成a^(n/2),n为奇数时分为a^(n/2)*a

2.倍增思想:稍微有一点难理解(

从头开始。若当前 p 为偶数,咱们不着急,只需把 x 自乘,然后 p/=2 (即考虑下一层,下几层会帮我们乘上 (x2)p/2的)。

若当前 p 为奇数,说明 p=x∗(x2)(p−1)/2 中前面那个 x 的存在,ans∗=x。然后继续考虑下一层(下几层会帮我们乘上(x2)(p−1)/2的)

)

代码1(分治):
#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<math.h>
#include <stdio.h>
using namespace std;
typedef long long ll;
inline int read()
{int k = 0, f = 1; char ch = getchar();while (ch < '0' || ch>'9'){if (ch == '-')f = -1;ch = getchar();}while (ch >= '0' && ch <= '9'){k = k * 10 + ch - '0';ch = getchar();}return k * f;
}
int solve(ll a, ll b, ll p)
{if (b == 0)return 1;ll ans = solve(a, b / 2, p) % p;if (b % 2 == 0){return ans * ans % p;}else{return ans * ans % p * a % p;}
}
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);ll a, b, p;cin >> a >> b >> p;cout << a << "^" << b << " mod " << p << "=" << solve(a, b, p) << endl;return 0;
}
代码2(倍增):
#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<math.h>
#include <stdio.h>
using namespace std;
typedef long long ll;
inline int read()
{int k = 0, f = 1; char ch = getchar();while (ch < '0' || ch>'9'){if (ch == '-')f = -1;ch = getchar();}while (ch >= '0' && ch <= '9'){k = k * 10 + ch - '0';ch = getchar();}return k * f;
}
void solve(ll x, ll y, ll p)
{ll ans = 1 % p;for (; y; y >>= 1){if (y & 1){ans = ans * x % p;}x = x * x % p;}cout << x << "^" << y << " mod " << p << "=" << ans << endl;
}
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);ll a, b, p;cin >> a >> b >> p;solve(a, b, p);return 0;
}

P10446 64位整数乘法 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

代码:

#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<math.h>
#include <stdio.h>
using namespace std;
typedef long long ll;
inline int read()
{int k = 0, f = 1; char ch = getchar();while (ch < '0' || ch>'9'){if (ch == '-')f = -1;ch = getchar();}while (ch >= '0' && ch <= '9'){k = k * 10 + ch - '0';ch = getchar();}return k * f;
}
void solve(ll x, ll y, ll z)
{ll ans = 0;for (; y; y >>= 1){if (y & 1)ans = (ans + x) % 5;x = (x * 2) % z;}cout << ans;
}
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);ll a, b, p;cin >> a >> b >> p;solve(a, b, p);return 0;
}

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

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

相关文章

高校搭建AIGC新媒体实验室,创新新闻教育教学模式

高校作为人才培养的重要阵地&#xff0c;必须紧跟时代步伐&#xff0c;不断创新教育教学模式&#xff0c;提升跨界融合育人水平&#xff0c;通过AIGC新媒体实验室探索创新人才培养模式。AIGC新媒体实验室不仅能够高效赋能高校宣传媒体矩阵&#xff0c;也可以助力教学实践与AIGC…

ISA95-Part3-通讯协议的解析与开发指南

在 MES/MOM 系统中实现 ISA-95 标准的通信协议部分,通常涉及以下几个关键步骤和应用场景: 一、关键步骤和应用场景: 1. ~协议选择~: - MES/MOM 系统需选择符合 ISA-95 标准的通信协议,常用的有 OPC UA(OLE for Process Control Unified Architecture)、XML、以及基于 H…

5分钟读懂GPS-RTK实时动态技术,建议收藏!

由于”智慧工地“理念的兴起和发展&#xff0c;目前越来越多的企业将信息技术手段融合于施工现场安全管理&#xff0c;构建智能化的安全监管模式。基于此&#xff0c;蓝牙LORA融合定位技术、UWB超宽带定位技术、GPS-RTK定位技术等信息技术也越来越频繁出现在大众视野。然而&…

记录通过Cloudflare部署属于自己的docker镜像源

引言 由于最近国内无法正常拉取docker镜像&#xff0c;然而找了几个能用的docker镜像源发现拉取回来的docker镜像不是最新的版本&#xff0c;部署到Cloudflare里Workers 和 Pages&#xff0c;拉取docker 镜像成功&#xff0c;故记录部署过程。 部署服务 登录Cloudflare后&…

Android Gradle开发与应用(一): Gradle基础

Gradle是一种基于Groovy语言的构建工具&#xff0c;用于自动化构建、测试和部署Android应用程序。它提供了一种灵活和可扩展的方式来管理项目的构建过程&#xff0c;并且可以轻松地集成到Android开发工作流程中。 本文将介绍Gradle的基础知识&#xff0c;包括Gradle的安装和配…

软设之面向对象开发流程

面向对象开发流程分为 1.面向对象分析 2.面向对象设计 3.面向对象程序设计 4.面向对象测试 其中 面向对象分析包括 认定对象 组织对象 对象间的互相租用 基于对象的操作 识别类及对象&#xff1a; 识别类及对象 定义属性 定义服务 识别关系 识别包 面向对象程…

C++ 智能指针内存泄漏问题

shared_ptr相互嵌套导致循环引用 代码示例 #include <iostream> #include <memory> using namespace std;class B;class A { public:std::shared_ptr<B> b_ptr;~A() { std::cout << "A destroyed\n"; } };class B { public:std::shared_pt…

数据结构 1.1 数据结构的基本概念

本章总览&#xff1a; 一.什么是数据 1.数据 数据是信息的载体&#xff0c;是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程 序识别和处理的符号的集合。数据是计算机程序加工的原料。 早期计算机只能处理纯数值的问题&#xff0c;如世界第一题计算机ENI…

转让北京文化传媒公司带营业性演出经纪许可证

影视文化传播倡导将健康的影视文化有效传播给观众&#xff0c;从而构建观众与电影制作者的良 性沟通与互动&#xff0c;是沟通电影制作者与电影受众的重要桥梁。影视文化泛指以电影&#xff0c;电视方式所进行的全部文化创造&#xff0c;即体现为电影&#xff0c;电视全部的存在…

Java-List集合堆内存溢出

Java-List集合堆内存溢出 情况一情况二对照分析对照规定堆内存 情况一 往List<Object>的集合中不断插入元素&#xff0c;集合底层的数组会不断扩容&#xff0c;从0 -> 10 -> 10 10>>1…。最终出现堆内存溢出&#xff0c;是在扩容数组大小的时候。这里的过程…

【应届应知应会】SQL常用知识点50道

SueWakeup 个人主页&#xff1a;SueWakeup 系列专栏&#xff1a;借他一双眼&#xff0c;愿这盛世如先生所愿 个性签名&#xff1a;人生乏味啊&#xff0c;我欲令之光怪陆离 本文封面由 凌七七~❤ 友情提供 目录 数据库的概念 (什么是数据库) RDBMS NOSQL 数据库的分类 …

Qt涂鸦板

Qt版本&#xff1a;Qt6 具体代码&#xff1a; 头文件 dialog.h #ifndef DIALOG_H #define DIALOG_H#include <QDialog>QT_BEGIN_NAMESPACE namespace Ui { class Dialog; } QT_END_NAMESPACEclass Dialog : public QDialog {Q_OBJECTpublic:Dialog(QWidget *parent n…

0145__contain_of的原理与实现

contain_of的原理与实现_contain of-CSDN博客

从零开始!Jupyter Notebook的安装教程

引言 Jupyter Notebook作为一种交互式的开发环境&#xff0c;已经成为数据科学和机器学习领域中不可或缺的工具之一。它能够将代码、文本、图像和数据结合在一个灵活的文档中&#xff0c;使得数据分析和可视化变得更加直观和高效。 本文将详细介绍Jupyter Notebook的安装过程…

深入理解 Git `git add -p` 命令中的交互选项

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

500mA、低压差、低噪声、超快、无需旁路电容的CMOS LDO稳压器RT9013

一般描述 RT9013 SOT23-5封装的外观和丝印 RT9013 是一款高性能的 500mA LDO 稳压器&#xff0c;具有极高的 PSRR 和超低压差。非常适合具有苛刻性能和空间要求的便携式射频和无线应用。 RT9013的静态电流低至25μA&#xff0c;进一步延长了电池的使用寿命。RT9013 也适用于低…

mysql在部署时的问题

1.远程连接是否开放问题 DataGrip远程连接Ubuntu Linux MySQL服务器报错DBMS: MySQL (no ver.)-CSDN博客 【MySQL】DataGrip远程连接MySQL_datagrip连接远程mysql数据库-CSDN博客 一定要把对应端口规则打开 2.远程连接不适用3306作为默认运行端口 打开mysql的配置文件&…

音乐发行平台无加密开源源码

适用于唱片公司&#xff0c;用于接收物料&#xff0c;下载物料功能&#xff1a;个人或机构认证&#xff0c;上传专辑和歌曲&#xff0c;版税结算环境要求php7.4Nginx 1、导入数据库 2、/inc/conn.php里填写数据库密码等后台路径/admin&#xff08;可自行修改任意入口名称&…

AI在软件开发中的角色:助手还是取代者?

目录 前言 一、AI工具现状&#xff1a;高效助手的崛起 二、AI对开发者的影响&#xff1a;新技能与竞争力的重塑 三、AI开发的未来&#xff1a;共生而非取代 写在最后 前言 随着科技的飞速发展&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;在软件开发领域的应用日…

【JS】过滤数组中空值——arr.filter(Boolean)

前言&#xff1a;过滤数组中的空值&#xff0c;包括 &#xff08;undefined、null、“”、0、false、NaN&#xff09; Boolean函数可以将一个值转换为布尔值&#xff0c;空值会被转换为false&#xff0c;非空值会被转换为true 方法&#xff1a; const arr [1, 2, ""…