- 博客(56)
- 收藏
- 关注
原创 Mybatis笔记04 关联映射
在输出映射中,如果一个需要映射的类有成员变量不是基本数据类型,而是自定义的类或者是数据结构,当需要把结果集映射到这种类的时候,就需要用到关联映射。一对一关联映射有两个类,Order类和User类,对应数据库里的tb_orders和tb_user表。现在需要知道每个订单是哪个用户的,在tb_orders表里只有user_id,没有用户的具体信息,需要连接两个表查询结果,用association把结果集中的用户信息映射到user对象里。User.javapublic class User {
2021-03-16 10:23:36
122
原创 Mybatis笔记03 输入映射、输出映射、动态sql
1.输入映射单个参数可以用parameterType指定类型,一个对象的多个参数可以用类封装用parameterType指定。多个参数可以通过注解方式指定每个参数的类型。在UserMapper.xml内添加以下语句,该sql语句有两个参数。<select id="findUser" resultType="cn.edu.jxnuss.dpc.pojo.User"> select * from tb_user where id=#{id} and username=#{userna
2021-03-04 15:06:15
277
1
原创 Mybatis笔记02 Mapper动态代理
Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象。Mapper接口开发需要遵循以下规范:1、Mapper.xml文件中的namespace与mapper接口的类路径相同。此步骤目的:通过mapper.xml和mapper.java进行关联。2、Mapper接口方法名和Mapper.xml中定义的每个statement的id相同。3、Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的para
2021-03-03 21:24:31
153
1
原创 Mybatis笔记01 实现增删改查
仅方便之后复习在此之前本地MySQL数据库已经建立了名为mybatis的数据库,且建立了tb_user表。MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。1.通过pom.xml导入jar
2021-03-01 17:45:01
160
原创 c3p0连接池
遇到的问题:c3p0-config.xml 配置文件名一定要正确,且一定要在resources资源文件中,因resources误打成resourses,调了半天bug。c3p0简单的说,c3p0就是一个连接池。Java项目涉及数据库的操作的时候,需要编写代码用jdbc驱动来连接数据库,以此来对数据进行操作。但每访问以此数据库都需要建立连接,做完查询,又断开连接,这样带来的时间开销非常大。而c3p0就是建立一个"池子",这个"池子"里存放了很多它已经预先建立好的连接,但要访问数据库的时候,就直接拿一个连接
2020-12-04 20:12:30
1808
原创 新建Java Web项目以及目录结构
大三工作室要学的东西有点多,前面学过的怕忘记,打算写下来,方便之后复习。就拿目前老师教的一个网站,把知识都复现一遍。新建Java Web项目新建一个叫做bookshopping的项目。以maven项目方式新建。建立目录结构新建三个目录文件配置项目的Tomcat服务器选择war exploded模式war模式:把项目打包成war文件上传到服务器。war exploded模式:将WEB工程以当前文件夹的位置关系上传到服务器。一般选择war exploded模式,因为war exp
2020-12-04 19:48:28
779
1
原创 Java中堆、栈、常量池以及==和equals的区别
堆、栈、常量池Java中把内存分为两种:堆内存和栈内存。栈内存中存放基本类型的变量和对象的引用变量。堆内存中存放new创建的数组和对象。常量池中存放常量(字符串常量等)。栈的优势是存取速度快,但存在栈里的数据的生存周期是确定的, 局部变量存放在栈里,当超出作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。当正因为在运行时动态分配内存,存取速度较慢。
2020-12-04 19:40:24
134
原创 解决IDEA Tomcat运行项目后还是修改前的网页
IDEA Tomcat运行项目后还是修改前的网页坑死,浏览器有缓存机制,所以浏览器如果觉得网页没有更新,会直接提取缓存里的网页展示出来,也就是修改前的网页了。但这个功能对新手开发者来说可太坑了,搞了好久才弄清楚问题所在。右键检查,Network勾上Disable cache就行。其实浏览器缓存还是很好的机制,只是在开发网页的时候如果不知道会很难受。为什么使用缓存(1)减少网络带宽消耗无论对于网站运营者或者用户,带宽都代表着金钱,过多的带宽消耗,只会便宜了网络运营商。当Web缓存副本被使用时,只
2020-12-02 16:22:31
4738
11
原创 CF161C Abracadabra 分治
链接题意给定一个字符串的构造方式:首先只有一个字符串 a ,然后赋值这个字符串串联在后面,并在中间插入一个下一个字符。aabaabacabaabacabcdabacaba…总共26个小写英文加上10个数字,规定数字比字母大,即0=‘z’+1,1=‘z’+2 …给定l1 , r1 , l2 , r2 两个该字符串的子串,求最长公共子串长度。题解首先很容易发现,原字符串是回文串,且长度为2 ^ k - 1,k为字符个数,中间的字符唯一。根据中间的字符进行求解,原问题是在长度为2 ^ k -
2020-09-04 12:02:31
267
原创 Rinne Loves Graph——分层图
传送门题意n个城镇,有一些城镇被派兵戒严,求从1到n通过戒严的城镇不超过k次的最短距离。解法将在某个城镇通过了多少次戒严的城镇设为一个状态。d[i][j]:从1到i通过了j次戒严的城镇。(或者是分层图的做法,建图的时候定义n*k个点,对于加入的一条边,连接能到达的所有状态。)用dijkstra算法把每个状态看做一个点跑一遍即可。需要注意的是题中说的通过了一个戒严的城镇是 从一个戒严的点出发到达任意一个点,都会使得次数加1#include <bits/stdc++.h>#def
2020-07-08 11:41:44
289
原创 1e5个点n+100条边求任意两点之间的距离——最短路
传送门题意n个点m条边,q次询问求任意两点之间的距离。(n<=1e5,m<=n+100,所有边权为1,保证图连通)。思路这个多出的100多条边就很怪,先考虑如果没有多出边,就只有n-1条边,图连通,那么可以建立最小生成树,用LCA来做,任取一点为根,len[i]为i点到根的距离,dis(u,v) = len[u]+len[v]-2 * len[LCA(u,v)]。思考多出来的边(x,y)对答案有什么影响?两种情况:1.在u到v的最短路上 2.不在u到v的最短路上。如果在最短路上的话,
2020-07-07 15:58:36
338
原创 栗酱的数列 连续子序列和相等——kmp
传送门题意栗酱有一个长度为n的数列A,一个长度为m的数列B,现在询问A中有多少个长度为m的连续子序列A’,满足(a’1+b1)%k = (a’2+b2)%k = …… = (a’m + bm)%k。思路按照题目给的条件式只能暴力做,暴力做又超时。那么对满足式进行修改,(a[i]+b[i])%k=(a[i+1]+b[i+1])%k --> ((a[i]-a[i+1])%k+(b[i]-b[i+1])%k)%k = 0,问一个序列里有多少个满足条件的连续子序列,显然用kmp,匹配成功的条件
2020-07-04 16:24:52
340
原创 最少需要转90度的弯几次——建图
传送门题意给你一个N*N(2≤N≤100)的方格中,‘x’表示障碍,‘.’表示没有障碍(可以走),牛牛可以从一个格子走到他相邻的四个格子,但是不能走出这些格子。问牛牛从A点到B点最少需要转90度的弯几次。思路拐弯才要花费,把一个点拆成四个点,上下左右,从上到下 和 从左到右建双向边,边权为0;从上到左、从上到右、从下到左、从下到右建双向边,边权为1。建一个源点S和一个汇点T,S向A的四个方向的点建边,边权为0,B的四个方向的点向T建边,边权为1。最后跑dijkstra。#include <b
2020-07-03 18:36:32
326
原创 P3252 [JLOI2012]树——树上倍增
题意给定一个值 s 和一棵树。在树的每个节点有一个权值,第 i 个点的权值为a[i],问有多少条路径的节点权值总和为 s。路径中节点的深度必须是升序的。假设节点 1 是根节点,根的深度是 0,它的儿子节点的深度为 1。路径不必一定从根节点开始。思路路径必须是从低深度到高深度,也就是路径端点一定是祖先儿子关系,考虑倍增思路,预处理出f[i][j]:i节点的第2^ j个父亲是谁,dp[i][j]:i节点到第2^ j个父亲之间路径节点和(不包括i,包括2^j)。dfs枚举每一个节点,f[i][j] = f[
2020-07-02 17:37:00
241
原创 城市网络——树上倍增
题目链接题意有一个树状的城市网络(即 n 个城市由 n-1 条道路连接的连通图),首都为 1 号城市,每个城市售卖价值为 a_i 的珠宝。现在安排有 q 次行程,每次行程为从 u 号城市前往 v 号城市(走最短路径),保证 v 在 u 前往首都的最短路径上。 在每次行程开始时,你手上有价值为 c 的珠宝,每经过一个城市时(包括 u 和 v ),假如那个城市中售卖的珠宝比你现在手上的所有珠宝的最大值要优秀(价值更高,即严格大于),那么你就会选择购入。现在你想要对每一次行程,求出会进行多少次购买事件。思
2020-07-01 20:12:27
239
原创 tokitsukaze and Soldier 优先队列
题目链接题意n个士兵,每个士兵有两个值,战力vi,人数si,从n个人中选任意个人组成一个团,求团的战力最大值,团的战力是所有士兵的战力和,如果选到了士兵i,那么团的人数不能超过si。思路优先队列。首先,很容易想到的思路就是,假设现在是要选k个人,那么把士兵里si>=k的取出来,再选战力最大的k个士兵即可。可以用优先队列维护前k大和,那么考虑从大到小枚举k(队列里的元素都是能容许k个人的候选士兵,如果加入一个容许k+1人的士兵进去,前k+1的士兵中可能出现si<=k的士兵;那如果是加入一
2020-06-25 18:57:54
160
原创 牛客练习赛65 E 网络流 点权改变的处理方法
题目链接题意n点m条边的无向图,每个点的点权是ai,没经过一次点,点权增加bi,即第k次经过i点权值为ai + (k - 1) * bi,现给出q个xi和q个yi,每次从中选出一组xi,yi,统计从xi到yi的代价和(代价为从xi到yi经过的所有点的点权和),每个点只能选一次,q次后(也就是全选完),求最小代价。思路考虑最小费用最大流。重点解决几个问题:①点权改边权。拆点,一个点拆成一个入点和一个出点,点权就改为了从入点到出点的边权。②每经过一次点,权值增加。在网络流里,可以用拆点,入点和出点
2020-06-25 11:21:07
203
原创 2020年牛客算法入门课练习赛1补题
涉及:大量数据的第k小,几何斜率,圆形尺取,离散化,差分约束,前缀和,模拟。A 第K小数题意给n个数,求第k小的元素。(n<=5e6)思路直接sort超时。可以利用快排的思想,每次选一个基准元素,把小的元素放左边,大的元素放右边,如果左边的元素个数>=k,那么只需要从左边找第k小,右边就可以不管了;如果这个基准正好是第k小的位置,那就直接输出这个数;否则第k小就在右边,从右边找第(k-左边元素个数)小就可以了,左边的可以直接放弃,不需要进行排序。时间复杂度O(logn)。#in
2020-05-28 22:22:30
646
原创 K-th Number 二分
题目链接题意n个元素的数组A,从A数组中所有长度大于等于k的区间中取出第k大放入B数组中,求B数组的第m大。思路这题正常想很难搞,看了题解才懂。mark一下。考虑二分的做法,问题是求B数组第m大的是谁,假设为ans,考虑一个值x,求B数组里大于等于x的值是否大于m个,这个问题具有单调性,即求A数组里区间第k大的数大于等于x的区间是否多于m个。然而这个问题也不好解,神犇的做法来了,将数组A里大于等于x的值赋为1,否则为0,只要一个区间的和大于等于k,那么这个区间第k大的数就大于等于x,然后就是求有多
2020-05-25 18:34:23
202
原创 P2408 不同子串个数 后缀自动机做法
传送门题意给一个字符串,求它有多少个不同的子串。思路后缀数组当然是能做的,每个sa[i] - height[i]的和就是答案了。后缀自动机也可以做,后缀自动机上从起点到任意状态就是一个子串,每条路径表示的子串都不同,所以只要求出后缀自动机上从起点到其它点的路径条数就是不同子串的个数。#include <bits/stdc++.h>using namespace std;...
2020-03-18 19:36:30
185
原创 LightOJ - 1334 Genes in DNA KMP 求贡献思想
Genes in DNA题意给一个文本串和一个模式串,求模式串的所有前缀与后缀的组合在文本串里出现次数和。当我觉得我懂KMP的时候,KMP给了我一巴掌:不,你不懂!思路这题朴素的算法就是把模式串的前缀和后缀组合列出来,跑KMP求出现次数和。显然数据范围不允许,那考虑求贡献的方法,对于文本串中第i个字符,把所有模式串中以这个字符为结尾的前缀 的个数求出来,记为ans1[i],注意,这里的以...
2020-03-15 12:43:16
156
原创 LightOJ - 1428Melody Comparison KMP+后缀数组
题意给A,B两个串,求有多少个A的子串t,t中没有B这个子串。思路定义一个数组num,num[i]表示A字符串从i开始的A的子串能延伸到最右边的不包含B串的长度,其实就是从i开始向右的字符串不包含B的有多少个。所以sigma(num[i])就是答案的一部分了,又因为这样算出来的可能会有重复,要用后缀数组height数组去重,所以答案就是sigma(num[sa[i]] - min(heig...
2020-03-12 16:51:06
125
原创 hdu4511 AC自动机+最短路dp
题目链接题意直角坐标系中n个点,限制一些走过的路径的顶点顺序,要求从1到n最短的距离。如:不能经过1 -> 2 -> 3,那么就要求走过的路径不能包含有1 -> 2 -> 3这部分,但是1 -> 3 或者1 -> 2都是可以的,这样的限制路径可能有多条。思路求1到n的最短路问题,把所有限制的路建立AC自动机,这里用dp解最短路问题,dp[i][j]表示从...
2020-03-11 11:06:17
223
原创 hdu3341AC自动机+变进制状压dp
hdu3341题意给m个模式串和一个母串(字符串都是由ATCG组成),求这个母串重组后最多包含多少个模式串,可以重叠。思路看题目数据范围很小,首先暴力的思想,把母串的所有可能的排列方式都求一遍,取最大值。建立模式串的AC自动机,dp[i][x1][x2][x3][x4]表示i状态下有x1个A,x2个T,x3个C,x4个G。状态转移:dp[j][相应字母加一]=max(dp[j][相应字母加...
2020-03-08 11:47:27
156
原创 Poj1625 AC自动机+大数+DP
poj1625题意给一个含n个字符的字符集,p个字符串,问长度为m的字符串有多少种不包含任意一个字符串pi。题解首先这题应该想到dp,dp[i][j]表示长度为i的字符串以节点j(节点j表示一个AC自动机上的一个状态节点)结尾的满足条件的字符串种类。以p个字符串建立AC自动机,标记危险节点。想像一个这样的问题:假设当前在u节点,u节点就表示当前长度为x的字符串,从u经过状态转移到其他节点,...
2020-03-06 21:47:15
169
原创 #6227. 「网络流 24 题」最长 k 可重线段集问题
题目链接题意x0y平面上n条开线段,求一个线段子集,使得它的线段长度和最长,且对于每条垂直于x轴的线段都不超过k条线段与之相交。思路类似最长k可重区间集问题,因为只对x轴上的点有限制,一样的,离散化后建边,跑最大费用最大流,需要注意的是这里是开线段,有个神奇的处理就是把l改为l * 2+1,r改为r * 2。先对x离散化,处理出费用,也就是线段的长度,对于每个相邻的点连上容量为INF,费用...
2020-01-30 15:46:39
165
原创 #6224. 「网络流 24 题」深海机器人问题 收益记一次可走多次
题目链接题意P*Q的网格中,给出每条边的收益,若干个机器人的起始位置和目的地。机器人只能往东或北走,每条边可以走多次,但只能算一次收益,求最优机器人移动方案下的最大收益。思路有机器人数量,边的收益,这种问题显然优先考虑最大费用最大流。一条边的收益只能记一次,连一条容量为1费用为权值的边;然后每条边收益只记一次,但多个机器人可以走同一条路,所以对于每条边,加一条容量为INF,费用为0的边。建...
2020-01-29 17:44:25
194
原创 #6122. 「网络流 24 题」航空路线问题 输出路径
题目链接题意一张航空图,从西向东,1-n个城市,城市之间有若干条航线,航线可以往返,求从1到n再从n到1最多经过多少个不同的城市,1和n可以经过两次,其他城市都只能经过一次。思路经过次数,显然要想到拆点和流量控制,将每个城市点拆成入点和出点i和i+n,1与1+n之间的容量是2,费用是0,n与n+n之间的容量是2,费用是0,其他的入点与出点之间的容量是1,费用是0,这样就限制了1和n可以经过...
2020-01-28 17:29:51
202
原创 #6121. 「网络流 24 题」孤岛营救问题 迷宫 分层图
题目链接题意一个有n*m个方格的迷宫,相邻的方格之间可能是墙,也可能是连通的,也可能是门,门有多种类型,需要对应类型的钥匙才可以通过,某些方格里存放着钥匙,问从左上角(1,1)到(n,m)最短的时间。思路分层图,以携带的钥匙为层数,用二进制法存,按题意建图后跑spfa。#include <bits/stdc++.h>using namespace std;const in...
2020-01-28 15:00:56
257
原创 #6014. 「网络流 24 题」最长 k 可重区间集
题目链接题意给n个区间的集合S,求一个区间集合A属于S,且集合A的每个区间的长度和最大,每个点最多可以选k次。思路首先每个点可以重复k次,可以用流量来限制,用最大费用最大流来做。将所有区间离散化,源点在最左边,汇点在最右边,每一个点都向右边相邻的点连一条容量为INF,费用为0的边,对于每个区间,左端点到右端点连一条容量为1费用为r-l的边,容量为1是因为一个区间只能取一次。然后跑最大费用...
2020-01-27 17:20:23
148
原创 #6010. 「网络流 24 题」数字梯形 最大费用最大流 建图
题目链接题意分别求三个规则满足条件的所有路径最大和。思路网络流问题最重要的是建图问题。1.路径互不相交,也就是一个数字只能用一次,那就是拆点了,每个点拆分为入点和出点,入点和出点之间连一条容量为1费用为权值的边;建立一个源点和一个汇点,源点与第一行的入点相连,容量为1费用为0,最后一行的出点与汇点相连,容量为1费用为0,除最后一行外,每个点的出点向它的正下方和右下方的入点连一条容量为1...
2020-01-27 11:56:03
210
原创 最大子矩形问题
大佬博客讲解P1578 奶牛浴场题目描述由于John建造了牛场围栏,激起了奶牛的愤怒,奶牛的产奶量急剧减少。为了讨好奶牛,John决定在牛场中建造一个大型浴场。但是John的奶牛有一个奇怪的习惯,每头奶牛都必须在牛场中的一个固定的位置产奶,而奶牛显然不能在浴场中产奶,于是,John希望所建造的浴场不覆盖这些产奶点。这回,他又要求助于Clevow了。你还能帮助Clevow吗?John的牛场和...
2020-01-22 21:19:01
346
原创 P1231 教辅的组成——网络流为什么要拆点
洛谷P1231参考博客大佬Siyuan题意有n1本书,n2本练习册,n3本答案。给出m1个书和练习册的联系,m2个书和答案的联系,一本书一本练习册一本答案为一册,问最多可以组成多少册。思路如果只有两样东西就是典型的最大二分匹配问题,但这里有三种,所以匈牙利算法做不了,可以用最大流。建图方法是:源点->练习册->书(拆点)->答案->汇点。拆点很重要,下面是一个样例...
2020-01-21 19:19:08
297
原创 K小数查询求k小数的非主席树做法
题目链接题意给出一个长度为 n 的数列 A,接下来有m 次操作,操作有两种:1 l r x,表示对i属于[l,r],令Ai = min(Ai,x)2 l r k,表示询问区间[l,r]中第k小的数。思路第k小的数,也就是说小于第k小的有k-1个,考虑二分加分块,分块询问的时候求的是小于mid的数有多少个,二分逼近答案。#include <bits/stdc++.h>#d...
2020-01-21 18:06:45
329
原创 #6005. 「网络流 24 题」最长递增子序列
#6005题意给定正整数序列x1 , … , xn 。(1)计算其最长递增子序列的长度s。(2)计算从给定的序列中最多可取出多少个长度为s的递增子序列。(每个数只能取一次)(3)如果允许在取出的序列中多次使用x1和xn,则从给定序列中最多可取出多少个长度为s的递增子序列。思路第一问:n^2的dp搞定,处理出dp数组,dp[i]表示下标为i的数为结尾的最长不下降子序列的长度是多少。第...
2020-01-20 15:09:05
292
1
原创 hdu4738——tarjan割边
hdu4738题意n个岛m座桥的无向图,每座桥上有若干个士兵,派出最少的士兵只炸毁一座桥,使得n个岛不连通(派出的士兵不能少于驻守的士兵,特别的改桥的驻守人数为0的时候要派一个士兵)。思路用tarjan算法,满足dfn[u] < low[v]的(u,v)就是割边,直接处理出来取最小值,这里还有一个问题就是有重边,所以要判断一下。#include <bits/stdc++.h&...
2020-01-09 15:07:35
229
原创 hdu2767——tarjan强连通分量
hdu2767题意给n个点和m条有向边,求最少还需多少条边n个点构成强联通图。思路tarjan先处理出每一个强连通分量。如果强连通分量的个数为1,则答案为0。如果强连通分量的个数大于1,将每个强连通分量看成一个点,每个强连通分量之间可能存在边,a为没有出度的强连通分量的个数,b为没有入度的强连通分量的个数。则答案为max(a,b)(动手画下很容易得到)。#include <bi...
2020-01-08 19:21:55
200
原创 POJ - 1062 有限制的最短路
题目链接题意n个人每人有一个物品,每个物品可以直接买,也可以通过其他物品抵押加上少量的钱买,每个人有一个等级,经过若干次交换购买的人中的最大等级差不能超过m。求要得到第一件物品的最少花费是多少?思路如果没有等级约束就是一个最短路的模板题,根据a物品加w个金币换到b物品,可以建立一条有向边a->b,cost w。然后直接用最短路即可,但是因为有了约束,不能直接调用。考虑题目的要求是要换...
2019-12-19 19:53:05
146
原创 bzoj 2844-线性基
题目链接题意给定n个数以及一个数q,将这n个数的所有子集(可以为空)的异或值从小到大排序得到序列B(这样B内就有2^n 个 元素),求出q在序列B中第一次出现的下标,答案对10086取模(默认q一定存在)。思路首先有一个定理:B数列中每个数字出现次数都是2^(n-cnt),cnt为线性基的大小。知道了每个不同的数字都是2 ^(n-cnt)个后,只需要知道q在B里的排名就可以算出答案:2 ^...
2019-12-19 18:24:14
191
原创 bzoj 2115 线性基
题目链接题意给一个n个顶点m条边的无向带权图,求从1到n的一条路径上的最大异或和。思路从1到n的一条路径上,没有要求点各异、边各异,所以根据贪心的思想,如果有环的话,从1到n上的路径上的一个顶点,走过这个环再回到这个顶点,可能使异或值变大,所以遍历这些环,如果能使异或值增加的就走,最后可以得到最大异或值。这里用线性基求一个最小的 形成最大异或值 的集合。#include <bits...
2019-12-19 16:39:51
114
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人