ABC293题解ABCDEG
A1234567891011121314151617181920212223#include<bits/stdc++.h>using namespace std;using i64 = long long;int main() { ios::sync_with_stdio(false); cin.tie(nullptr); string s; cin >> s; int n = s.size(); s = ' ' + s; for (int i = 1; i <= n / 2; i++) { swap(s[i * 2], s[i * 2 - 1]); } for (int i = 1; i <= n; i++){ cout << s[i]; } return...
ABC281题解A-F
A12345678910111213141516#include<bits/stdc++.h>using namespace std;using i64 = long long;int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; for (int i = n; i >= 0; i--) { cout << i << '\n'; } return 0;} B12345678910111213141516171819202122232425262728293031323334353637#include<bits/stdc++.h>using namespace std;using i64 = long long;int main() { ...
字典树
像查字典一样,将字符存到树的节点上。123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596#include<bits/stdc++.h>#include<array>using namespace std;struct node { array<int, 26> son; bool isend; int prenum; bool repeat;};struct Trie { vector<node> tr; int N; int siz; Trie(int N) : N(N), siz(0) { tr.assign(N,...
SQL_Join
在 SQL 中,JOIN 用于将两个表的数据合并查询,主要有三种常见的连接方式: 1. INNER JOIN(内连接) 只返回两个表中满足连接条件的匹配数据。 不匹配的数据不会出现在结果集中。 📌 示例 1SELECT A.*, B.* FROM A INNER JOIN B ON A.id = B.a_id; 结果: 仅包含 A 和 B 中 id = a_id 匹配的行。 2. LEFT JOIN(左连接) 返回左表的所有数据,即使右表中没有匹配的数据。 右表中没有匹配的数据时,对应的列会填充 NULL。 📌 示例 123SELECT A.*, B.*FROM ALEFT JOIN B ON A.id = B.a_id; 结果: 以 A 表为主,B 中没有匹配的行会显示 NULL。 3. RIGHT JOIN(右连接) 返回右表的所有数据,即使左表中没有匹配的数据。 左表中没有匹配的数据时,对应的列会填充 NULL。 📌 示例 1234SELECT A.*, B.*FROM ARIGHT JOIN B ON A.id =...
死锁活锁和饥饿
死锁死锁是说两个或多个线程等待着一个线程释放资源而无法执行,而等待的线程又不释放资源导致线程阻塞。使得任务无法执行 发生死锁的必要条件(四个必要条件同时满足才会导致死锁): 互斥(Mutual Exclusion):某些资源只能由一个线程独占使用。 持有并等待(Hold and Wait):线程持有某些资源的同时,还在等待其他资源。 不可剥夺(No Preemption):已分配的资源不能被强制剥夺,必须由持有者主动释放。 循环等待(Circular Wait):存在一个线程集合,其中每个线程都在等待另一个线程持有的资源,形成一个闭环。 1234567891011121314151617181920212223242526272829class Lock { static final Object resource1 = new Object(); static final Object resource2 = new Object(); public static void main(String[] args)...
Nginx
Nginx 基本概念Nginx(发音:Engine-X)是一个高性能的 HTTP 服务器和反向代理服务器,同时也可以用于负载均衡和静态资源服务。相比于传统的 Apache 服务器,Nginx 具有高并发、低内存占用和高扩展性的特点,因此被广泛用于 Web 服务器架构。 Nginx 的主要功能: 静态资源服务(如 HTML、CSS、JS、图片等) 反向代理(用于转发请求到后端服务器) 负载均衡(多台服务器均衡处理请求) HTTPS 安全加密(使用 SSL 证书) 动静分离(将静态资源与动态请求分离,提高性能) 1. Nginx 反向代理什么是反向代理?反向代理(Reverse Proxy)指的是 Nginx 作为一个中间服务器,接收客户端请求,并将请求转发给后端的真实服务器,然后再把后端的响应返回给客户端。 这样做的好处: 隐藏后端服务器,提高安全性 支持负载均衡,提升系统性能 缓存静态资源,减少服务器压力 跨域代理,解决前端跨域问题 示例:Nginx 配置反向代理假设你的后端服务运行在 http://localhost:8080,你希望通过...
莫队
普通莫队算法 给出一个序列,要求每次查询L, R中满足某些条件的数字,输出每次查询的结果 正常操作下需要进行$O(n^2)$ ,但是使用莫队可以实现 $O(nsqrt(n))$ 查询所有操作; 莫队主要在于预先处理 查询操作,用 l 和 r 两个指针找到当前窗口,每次移动指针使得时间复杂度降低。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990#include<bits/stdc++.h>using namespace std;using i64 = long long;struct Query { int l, r, id;};int main() { ios::sync_with_stdio(false); ...
JDBC
JDBC 概述 定义:Java Database Connectivity (JDBC) 是 Java 语言操作关系型数据库的一套 API,MyBatis 等框架底层均基于 JDBC。 核心功能:提供数据库连接、SQL 执行、结果集处理等操作接口。 JDBC 操作示例需求:更改 id=1 的记录的 age 为 2 123456789101112131415161718192021public void test() throws Exception { // 1. 注册驱动(兼容性建议显式加载) Class.forName("com.mysql.cj.jdbc.Driver"); // 2. 建立数据库连接 String url = "jdbc:mysql://localhost:3306/web01"; String username = "root"; String password = "1234"; Connection...
MySQL
启动 : net start mysql 查看有没有进程1tasklist| findstr "mysql" 杀死进程1taskkill/f /t /im mysqld.exe 登录mysql: 语法:12345mysql -u用户名 -p密码 [-h数据库服务器IP地址 -P端口号]// 一般直接mysql -uroot -p后输入密码登录 卸载: SQL 一门操作关系型数据库的编程语言 分类 DDL:数据定义语言,定义数据库对象 DML:数据操作语言,对数据库数据进行修改 DQL:数据查询语言,查询 DCL:数据控制语言,控制,用来控制数据库访问权限 DDL - 数据库 操作语法 1234567891011121314-- 查询所有数据库show databases;-- 查询当前数据库select database();-- 使用 / 切换数据库名字use 数据库名字-- 创建数据库(如果不存在),数据库不能重复create database [if not exist] 数据名字 [default charset...
二分图最大匹配
匈牙利算法 本质上是一个调整策略的方法,有点类似反悔贪心。 首先让可以匹配的点直接匹配(不必顾及后面的点),之后到了某个点进行匹配时,如果该点可以匹配直接匹配,否则从该点所连的对应点开始,找到它的上一个匹配点,让他尝试着更换一个匹配,如果成功更换匹配就更新当前匹配,否则匹配失败,这样最后总会得到一个最大匹配。 具体实现so ez, 设置一个vis标记当前对应点是否在更新的交替路中,设置Match作为对面的点的匹配,dfs即可。 12345678910111213141516171819202122232425262728293031323334353637383940struct Match { int n; vector<vector<int>> e; vector<int> match, vis; Match(int n) : vis(n + 1), n(n) { e.resize(n + 1); match.assign(n + 1, -1); ...
