<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[getupdown的博客]]></title><description><![CDATA[个人博客]]></description><link>https://blog.youkuaiyun.com/getupdown</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; getupdown]]></copyright><item><title><![CDATA[Mybatis初探——对象关系]]></title><link>https://blog.youkuaiyun.com/getupdown/article/details/80863347</link><guid>https://blog.youkuaiyun.com/getupdown/article/details/80863347</guid><author>getupdown</author><pubDate>Sat, 30 Jun 2018 00:50:15 +0800</pubDate><description><![CDATA[紧接着上一章 Mybatis初探——流程走一遍，得出了文末的结论。 
其实我觉得，对于一个框架，最重要的研究透，其中的对象关系。 
这个对象关系体现在：这个对象封装了什么，和其他对象的关系是什么？一对一？一对多？……

这一章节开始研究mybatis框架中，各个对象之间的关系。



2. 相关对象

接上文，我们对刚刚过程中StaticSqlSource一波断点操作，我们发现，和sql语句相关的...]]></description><category></category></item><item><title><![CDATA[Mybatis初探——流程走一遍]]></title><link>https://blog.youkuaiyun.com/getupdown/article/details/80863328</link><guid>https://blog.youkuaiyun.com/getupdown/article/details/80863328</guid><author>getupdown</author><pubDate>Sat, 30 Jun 2018 00:42:04 +0800</pubDate><description><![CDATA[对于自己每天用的东西，会用不够，并且要知其所以然。这个专题中我会随便写一些关于现在主流框架的源代码研读。 
好奇心是最好的老师。 
今天从mybatis写起。

我看的是3.4.3版本的mybatis源码，是结合spring-mybatis一起读的。 
更重要的是大家自己去一步步跟进代码，研读

1. mapper是如何映射到一个真实可调用的类的

经过一番探索，发现mapper是使用jdk的动态...]]></description><category></category></item><item><title><![CDATA[ThreadLocal探索]]></title><link>https://blog.youkuaiyun.com/getupdown/article/details/79630334</link><guid>https://blog.youkuaiyun.com/getupdown/article/details/79630334</guid><author>getupdown</author><pubDate>Tue, 20 Mar 2018 19:26:18 +0800</pubDate><description><![CDATA[实现

假设有如下代码



class Single {
    public static ThreadLocal&amp;lt;Integer&amp;gt; ThreadLocalA = new ThreadLocal&amp;lt;&amp;gt;();
    public static ThreadLocal&amp;lt;Integer&amp;gt; ThreadLocalB = new ThreadLocal&amp;lt;&amp;gt;...]]></description><category></category></item><item><title><![CDATA[Kingdom Division  ——hackerrank]]></title><link>https://blog.youkuaiyun.com/getupdown/article/details/73612248</link><guid>https://blog.youkuaiyun.com/getupdown/article/details/73612248</guid><author>getupdown</author><pubDate>Thu, 22 Jun 2017 23:58:17 +0800</pubDate><description><![CDATA[题意：给一棵树的每个节点涂色（红或黑），使得任意一个红结点周围不全是黑结点，并且任何一个黑结点周围不全是红结点，问这样的涂色方式有多少种。 
链接：这里写链接内容 
思路：树形dp。 
dp[i][0/1][0/1]表示第i个节点是红色/黑色的时候，其叶子 不全部和他相反/全部和他相反的情况下，其代表子树涂色种类数。方程： 
dp[i][0][1] 为其叶子的dp[v][1][0]的乘积 
dp[i]]></description><category></category></item><item><title><![CDATA[51nod 1337 翻转游戏]]></title><link>https://blog.youkuaiyun.com/getupdown/article/details/71247189</link><guid>https://blog.youkuaiyun.com/getupdown/article/details/71247189</guid><author>getupdown</author><pubDate>Fri, 05 May 2017 23:43:50 +0800</pubDate><description><![CDATA[这个题的关键在于那些？的要求，因为是？所以不用一下子满足，这就是这个题的玄机了。
于是我们可以“顺便”把这些 “对于当前关是？，但是对于以后的关不是？” 的灯给进行操作。
这样就可以减少次数了。
#include
#include
#include
#include
#include
#define LL long long int
using namespace std;


char m]]></description><category></category></item><item><title><![CDATA[51nod 1405 树的距离之和]]></title><link>https://blog.youkuaiyun.com/getupdown/article/details/71247112</link><guid>https://blog.youkuaiyun.com/getupdown/article/details/71247112</guid><author>getupdown</author><pubDate>Fri, 05 May 2017 23:34:15 +0800</pubDate><description><![CDATA[这是一个树形dp的思想，两次dfs。
第一次dfs处理出，对于每个u，其所有子孙节点到其的距离之和。
第二次dfs处理出，对于每个u，所有点到其距离之和。
#include
#include
#include
#include
#include
#include
#include
#include
#define LL long long int
using namespace std;

]]></description><category></category></item><item><title><![CDATA[51nod 1469 淋漓尽致子串]]></title><link>https://blog.youkuaiyun.com/getupdown/article/details/71246675</link><guid>https://blog.youkuaiyun.com/getupdown/article/details/71246675</guid><author>getupdown</author><pubDate>Fri, 05 May 2017 23:28:10 +0800</pubDate><description><![CDATA[这个题的官方题解是用 后缀自动机 做的，我用后缀数组完成了这道题。
首先，我们来定义一下淋漓尽致子串。

1.令原串为S。

2.设子串的长度为len，在原串S中出现的次数为k，令其出现的位置为p1， p2， ....pk(即这个子串在原串中[pi，pi + len - 1]中出现)。

3.若k=1，则该子串不是淋漓尽致子串。
4.若存在pi，pj(i != j)，使得S[pi]]></description><category></category></item><item><title><![CDATA[51nod 1461 稳定桌]]></title><link>https://blog.youkuaiyun.com/getupdown/article/details/70802594</link><guid>https://blog.youkuaiyun.com/getupdown/article/details/70802594</guid><author>getupdown</author><pubDate>Wed, 26 Apr 2017 15:23:01 +0800</pubDate><description><![CDATA[这个题直接考虑：每种长度的桌脚，分别作为最长的桌脚的情况。根据这个枚举。
对于最长桌脚x，所以大于x的长度肯定必须要砍掉。
对于小于x的桌脚，尽量多地保留x（尽量少地砍x），其实就是不砍。
然后看
CF上的原题比这个简单，主要是因为CF上那个，桌角的长度只有200以内，所以可以开桶。
但是51nod这个题长度有100000，所以不能扫描桶了。
所以这里我使用一个Treap 每次算出前k]]></description><category></category></item><item><title><![CDATA[51nod 1674 区间的价值 V2]]></title><link>https://blog.youkuaiyun.com/getupdown/article/details/70258369</link><guid>https://blog.youkuaiyun.com/getupdown/article/details/70258369</guid><author>getupdown</author><pubDate>Thu, 20 Apr 2017 14:51:18 +0800</pubDate><description><![CDATA[题目链接：点击打开链接
这个题很明显是要从位运算的角度去考虑的。
考虑“与运算“ 和 ”或运算“  的性质。
与运算，是只要有一个0，那么就都是0
或运算，是只要有一个1，那么就都是1
考虑样例:
3: 011
4: 100
5: 101
假如现在扫描到了第三个数5，那么就是要求 (3 & 4& 5) * (3|4|5)
按位扫描，最高位有2个连续的1，意味着最高位可以对答案贡]]></description><category></category></item><item><title><![CDATA[51nod 1524 可除图的最大团]]></title><link>https://blog.youkuaiyun.com/getupdown/article/details/70252240</link><guid>https://blog.youkuaiyun.com/getupdown/article/details/70252240</guid><author>getupdown</author><pubDate>Thu, 20 Apr 2017 00:46:19 +0800</pubDate><description><![CDATA[题目链接：点击打开链接
这个题如果往图论上不行，因为边太多了，所以我往数的角度想。
如果能组成一个集合，那么这些数从小到大排，两两之间肯定有倍数关系。
所以用dp[x]表示，到x为止，能组成的最大集合。
用一个arr数组表示，这个数有没有在集合中出现。
不会超时，因为每个状态只需要走一次，而且转移的同时会覆盖掉没覆盖的状态。
用一下读入优化好一些。
#include
#include]]></description><category></category></item><item><title><![CDATA[51nod 1503 猪和回文 （dp + 优化好题）]]></title><link>https://blog.youkuaiyun.com/getupdown/article/details/70249569</link><guid>https://blog.youkuaiyun.com/getupdown/article/details/70249569</guid><author>getupdown</author><pubDate>Thu, 20 Apr 2017 00:16:09 +0800</pubDate><description><![CDATA[题目链接：点击打开链接
这道题是个dp计数问题，朴素的dp方程其实并不是很难
dp[x1][y1][x2][y2]表示当从左上角走到x1,y1 从右下角走到x2,y2时的状态总数，然后根据上下左右，字符是否相等转移即可。
但是这里的4维都是高达500的，首先这么大的DP数组肯定是开不下的，所以一定要优化。
思考转移过程，因为这里要求是回文，所以我们肯定是从 两个相同字符长度 转移到 下一个]]></description><category></category></item><item><title><![CDATA[51nod 1076 2条不相交路径（边双联通分量）]]></title><link>https://blog.youkuaiyun.com/getupdown/article/details/70150681</link><guid>https://blog.youkuaiyun.com/getupdown/article/details/70150681</guid><author>getupdown</author><pubDate>Thu, 13 Apr 2017 00:58:22 +0800</pubDate><description><![CDATA[题目要求从S到T是否有两条“不相交的路径”，意味着S到T中间没有必经之路，这样才可以做到两条不相交的路径。
那么这个问题就变成了，从S到T，路上是否有桥
在同一个边双联通分量中，每两个点之间都有不唯一的路径相互可达，也就意味着没有桥。
所以只要用dfs处理出所有的边双联通分量，对S和T判断一下是否在同一个边双联通分量即可。


#include
#include
#include
#i]]></description><category></category></item><item><title><![CDATA[51nod 1460 连接小岛 （贪心）]]></title><link>https://blog.youkuaiyun.com/getupdown/article/details/70150393</link><guid>https://blog.youkuaiyun.com/getupdown/article/details/70150393</guid><author>getupdown</author><pubDate>Thu, 13 Apr 2017 00:49:38 +0800</pubDate><description><![CDATA[对于每两个相邻岛屿，通过简单的计算，可以得出可以连接这两座岛之间的 所需要的桥的 长度范围，有n-1个这样的范围

然后就相当于用m个点，其中抽出n-1个点去对应n-1个区间。

我的做法是把所有的区间按照右端点从小到大排序，，右端点相同按照左端点从小到大排序，

然后用multiset去存桥的长度，每次lower_bound一下，判断一下

时间复杂度O(nlogn)。#incl]]></description><category></category></item><item><title><![CDATA[51nod 1103 N的倍数 （抽屉原理）]]></title><link>https://blog.youkuaiyun.com/getupdown/article/details/70150240</link><guid>https://blog.youkuaiyun.com/getupdown/article/details/70150240</guid><author>getupdown</author><pubDate>Thu, 13 Apr 2017 00:46:02 +0800</pubDate><description><![CDATA[这题乍一看是普通的背包做法，但是发现时间复杂度无法承受。
发现mod的是n，余数有0~n-1这些情况，
一共有n个数，如果有余数为0的，那么就直接出答案了。
如果没有，即1~n-1中，但是有n个数，说明至少有2个是余数相同的（抽屉原理）。
对于普通的数，这个性质看上去没什么用。
但是，对于前缀和就有用了。
有n个前缀和，至少有2个前缀和是相同的。
那么这两个下标中间的部分就是我们要的]]></description><category></category></item><item><title><![CDATA[51nod 1478 括号序列的最长合法子段]]></title><link>https://blog.youkuaiyun.com/getupdown/article/details/69092224</link><guid>https://blog.youkuaiyun.com/getupdown/article/details/69092224</guid><author>getupdown</author><pubDate>Tue, 04 Apr 2017 17:13:46 +0800</pubDate><description><![CDATA[题目：点击打开链接
用一个栈，每次弹栈之后，读取弹栈之后，最高的那个下标，那个与当前坐标的差就是最长的序列。
如果说是判断合法括号串，那么扫描一遍之后如果栈空就说明合法，对于括号子串也是如此，只不过是“部分空”，所以读取“弹栈之后，最高的那个下标”，当前下标与其做个差就是当前长度。
一开始可以存一个"-1"修正一下。#include
#include
#include
#include
#i]]></description><category></category></item><item><title><![CDATA[51nod 1453抽彩球]]></title><link>https://blog.youkuaiyun.com/getupdown/article/details/69053394</link><guid>https://blog.youkuaiyun.com/getupdown/article/details/69053394</guid><author>getupdown</author><pubDate>Mon, 03 Apr 2017 22:24:23 +0800</pubDate><description><![CDATA[题目：点击打开链接
做法：“对于所有颜色为i
 (1的球，他的最后一个球总是在编号比他大的球拿完之前拿完”，也就意味着，i拿完的时候，不可以有它前面的球没拿完。
假设现在拿完了第i种球，准备在其中插入第i+1种球（第i+1种球有t[i+1]个），就相当于，在这些球的最后一定要放一个i+1号球，设没放i+1号球的球数为cnt，cnt个球会产生cnt+1个空，问题就转换成了：在cnt+1个空中，]]></description><category></category></item><item><title><![CDATA[51nod 1712 区间求和]]></title><link>https://blog.youkuaiyun.com/getupdown/article/details/68952240</link><guid>https://blog.youkuaiyun.com/getupdown/article/details/68952240</guid><author>getupdown</author><pubDate>Sun, 02 Apr 2017 15:23:37 +0800</pubDate><description><![CDATA[题目链接：点击打开链接


解法：
这个题首先考虑一个简单情况：对于区间[x,y]，权值为多少。
容易写出公式：F[x , y] = S[y] - S[x-1] - (sum[y]-sum[x-1])*(x-1)+sum[x-1]*(y-x+1)
其中S[x]表示 从第一个元素到第x个元素的 所有有序二元组的和（题目中定义的），sum表示前缀和
整理一下就是：F[x , y] = S]]></description><category></category></item><item><title><![CDATA[Prefixes and Suffixes - Codeforces432D（后缀数组）]]></title><link>https://blog.youkuaiyun.com/getupdown/article/details/65658542</link><guid>https://blog.youkuaiyun.com/getupdown/article/details/65658542</guid><author>getupdown</author><pubDate>Fri, 24 Mar 2017 22:06:41 +0800</pubDate><description><![CDATA[给一个串，找到这样的子串：它既是这个母串的前缀，又是这个母串的后缀。统计这样的串的个数，长度和在母串中总共的出现次数。


解法：
首先把后缀数组排出来，找到代表母串的那个后缀的rank，这个rank设为st。
有一个结论比较重要：

“设有一个子串x满足这个条件（它既是母串前缀，又是母串后缀），设这个子串所表示  的后缀  的位置为r。
则r上面就必定没有和这个后缀相等的串了。”]]></description><category></category></item><item><title><![CDATA[Hdu 5769 Substrings （后缀数组）]]></title><link>https://blog.youkuaiyun.com/getupdown/article/details/53692303</link><guid>https://blog.youkuaiyun.com/getupdown/article/details/53692303</guid><author>getupdown</author><pubDate>Fri, 16 Dec 2016 14:04:07 +0800</pubDate><description><![CDATA[后缀数组的一个功效是统计一个串里多少个不同的子串。 
这个题就稍微改了一下，其实大体做法不变。 
他要求  至少包含1个指定字母 的子串。 
所以反过来想，所有子串 减去 不包含指定的子串  就可以了。 
前者是个基本问题，重点是后者。字符串从后向前扫描一遍，处理出每个字符开始，向前延伸最大多少，不包含指定字母（near数组）。 
然后就相当于每个后缀都减少了一段，并且要改造height数组。 
h]]></description><category></category></item><item><title><![CDATA[2016ICPC青岛网络赛 1006]]></title><link>https://blog.youkuaiyun.com/getupdown/article/details/52564341</link><guid>https://blog.youkuaiyun.com/getupdown/article/details/52564341</guid><author>getupdown</author><pubDate>Sat, 17 Sep 2016 18:39:47 +0800</pubDate><description><![CDATA[欧拉回路/欧拉通路。
如果不是欧拉回路，欧拉通路，或者 点数大于1的 连通分支数  大于1 直接impossible。


如果是欧拉回路：
每个点都可以作为起点，除了终点多算了一次进入外，对于这些点来说，每个点进出次数都是成对的，而这个对数就是序列中该点出现的次数。
由于异或的性质：x^x=0 && 交换律  -> 出现次数是偶数可以不统计，奇数的统计一次即可，所以对于所有点，求 该]]></description><category></category></item></channel></rss>