<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[aa288288的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/aa288288</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; aa288288]]></copyright><item><title><![CDATA[NTT                                                       分类：            templates             2015-...]]></title><link>https://blog.youkuaiyun.com/aa288288/article/details/101637830</link><guid>https://blog.youkuaiyun.com/aa288288/article/details/101637830</guid><author>aa288288</author><pubDate>Tue, 11 Aug 2015 23:34:00 +0800</pubDate><description><![CDATA[我觉得我还需要理解一下 FFT 和 NTT …



#include &lt;cstdio&gt;
#include &lt;cstdlib&gt;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;

const int maxn = 4e4+5, Mod = 950009857;
const int G ...]]></description><category></category></item><item><title><![CDATA[ToDoList                                                       分类：            introspect            ...]]></title><link>https://blog.youkuaiyun.com/aa288288/article/details/101637826</link><guid>https://blog.youkuaiyun.com/aa288288/article/details/101637826</guid><author>aa288288</author><pubDate>Tue, 11 Aug 2015 23:30:00 +0800</pubDate><description><![CDATA[poj2376

bzoj3110


        
    
                 
            版权声明：本文为博主原创文章，未经博主允许不得转载。
        

转载于:https://www.cnblogs.com/dashgua/p/4722942.html...]]></description><category></category></item><item><title><![CDATA[zoj 2334                                                       分类：            zoj             templa...]]></title><link>https://blog.youkuaiyun.com/aa288288/article/details/101637827</link><guid>https://blog.youkuaiyun.com/aa288288/article/details/101637827</guid><author>aa288288</author><pubDate>Tue, 11 Aug 2015 23:12:00 +0800</pubDate><description><![CDATA[可并堆，左偏树，这是神犇“顺手学的东西”

以下是左偏树的合并操作代码。



int merge(int x,int y)
{
//p[i] 结点i的权值，这里是维护大根堆
//d[i] 在i的子树中，i到叶子结点的最远距离.

    if(!x) return y;
    if(!y) return x;

    if(p[x] &lt; p[y]) s...]]></description><category></category></item><item><title><![CDATA[hdu 5357                                           2015-08-10 22:52    7人阅读    评论(0)    收藏...]]></title><link>https://blog.youkuaiyun.com/aa288288/article/details/101637824</link><guid>https://blog.youkuaiyun.com/aa288288/article/details/101637824</guid><author>aa288288</author><pubDate>Mon, 10 Aug 2015 22:52:00 +0800</pubDate><description><![CDATA[括号匹配，栈



开始感觉题意很奇怪，表示这道题不会做。。。然而看了题解，原来并不是太难啊~！



我太弱了，还是直接贴代码吧。。。



#include &lt;cstdio&gt;
#include &lt;cstdlib&gt;
#include &lt;cstring&gt;
#include &lt;cmath&gt;
#include &lt;c...]]></description><category></category></item><item><title><![CDATA[poj 2796                                                       分类：            poj             2015-0...]]></title><link>https://blog.youkuaiyun.com/aa288288/article/details/101637822</link><guid>https://blog.youkuaiyun.com/aa288288/article/details/101637822</guid><author>aa288288</author><pubDate>Mon, 10 Aug 2015 15:38:00 +0800</pubDate><description><![CDATA[如果确定了 ax 为最小值，那么包含 ax 并且以 ax 为最小值的区间个数是 O(N2) 的。

因为序列中所有数的值非负，所以只需要考虑满足以上条件的最长区间即可。

而包含 ax 并且以 ax 为最小值的最长区间可以用两次单调队列求出，最后对每个 ax 计算答案即可。



#include &lt;cstdio&gt;
#include &lt;cstdl...]]></description><category></category></item><item><title><![CDATA[poj 1821                                                       分类：            poj             2015-0...]]></title><link>https://blog.youkuaiyun.com/aa288288/article/details/101637825</link><guid>https://blog.youkuaiyun.com/aa288288/article/details/101637825</guid><author>aa288288</author><pubDate>Mon, 10 Aug 2015 15:37:00 +0800</pubDate><description><![CDATA[把转移方程优化一下，改变决策顺序就行了。。。



#include &lt;cstdio&gt;
#include &lt;cstdlib&gt;
#include &lt;cstring&gt;
#include &lt;cmath&gt;
#include &lt;ctime&gt;
#include &lt;string&gt;
#include &lt;...]]></description><category></category></item><item><title><![CDATA[codeforces 366D                                                       分类：            codeforces     ...]]></title><link>https://blog.youkuaiyun.com/aa288288/article/details/101637819</link><guid>https://blog.youkuaiyun.com/aa288288/article/details/101637819</guid><author>aa288288</author><pubDate>Sun, 09 Aug 2015 17:38:00 +0800</pubDate><description><![CDATA[很有趣的题啊，首先要知道从 1 开始，只走一条路径到达 n 的数字一定是连续的区间，

先枚举确定答案 L，再通过拓扑排序 DP 计算最大的 R (DP过程中确定无向边的方向)，

当然我直接写了一个 SPFA 来更新 DP 值，然后就 AC 了~

SPFA期望复杂度 : O(n+m)

时间复杂度：O(m∗(n+m)) 



#include &lt;cst...]]></description><category></category></item><item><title><![CDATA[hdu 3593                                                       分类：            hdu             2015-0...]]></title><link>https://blog.youkuaiyun.com/aa288288/article/details/101637608</link><guid>https://blog.youkuaiyun.com/aa288288/article/details/101637608</guid><author>aa288288</author><pubDate>Sun, 09 Aug 2015 16:43:00 +0800</pubDate><description><![CDATA[终于理解树形依赖背包啦~



这个树形DP的转移方程还是比较简单的。

树形依赖背包的优化:

设当前结点为 x，因为选取物品 x 需要强制选取物品 fa(x)，

所以直接令 dp(x)=dp(fa(x)) 并限制背包空间，然后处理 dp(son(x))，

最后强制加入物品 x，即用 dp(x)+g(x)来更新 dp(fa(x)) 即可。

这样就在强制选取...]]></description><category></category></item><item><title><![CDATA[poj 3134                                                       分类：            poj             2015-0...]]></title><link>https://blog.youkuaiyun.com/aa288288/article/details/101637612</link><guid>https://blog.youkuaiyun.com/aa288288/article/details/101637612</guid><author>aa288288</author><pubDate>Sat, 08 Aug 2015 23:42:00 +0800</pubDate><description><![CDATA[喜闻乐见的迭代加深搜索

快速幂最多只需要 2∗logX 次就能得到想要的任何数

然而这道题的答案会更小，迭代加深搜索显然是可以承受的。



剪枝优化： 
如果剩余的操作次数都用来将最大数与最大数相乘， 
得到的结果仍然比希望得到的数小，那么这个状态就一定是不可行的



#include &lt;cstdio&gt;
#include &lt;cstdlib...]]></description><category></category></item><item><title><![CDATA[poj 1186                                                       分类：            poj             2015-0...]]></title><link>https://blog.youkuaiyun.com/aa288288/article/details/101637607</link><guid>https://blog.youkuaiyun.com/aa288288/article/details/101637607</guid><author>aa288288</author><pubDate>Sat, 08 Aug 2015 22:28:00 +0800</pubDate><description><![CDATA[似乎是NOI 2001的题目，感觉很有意思。。。



Meet in the Middle （中途相遇法）



看起来O(MN)不可做，方程移项有真相：k1∗xp11+k2∗xp22+k3∗xp33=−(k4∗xp44+k5∗xp55+k6∗xp66)

分别计算 :

k1∗xp11+k2∗xp22+k3∗xp33=W 的解数fL(W)

k4∗xp44+k...]]></description><category></category></item><item><title><![CDATA[poj 1379                                                       分类：            poj             templa...]]></title><link>https://blog.youkuaiyun.com/aa288288/article/details/101637823</link><guid>https://blog.youkuaiyun.com/aa288288/article/details/101637823</guid><author>aa288288</author><pubDate>Sat, 08 Aug 2015 22:17:00 +0800</pubDate><description><![CDATA[传说正解是V图，想想都觉得难写。。。



模拟退火~ 随机取几个点，将温度设置为随机范围，然后随机爬山算法即可。。。

如果参数设置得比较优，就可以在精度范围内取得最优解。。。

所以暂时就不学V图了(反正写不出)



注意如果用G++交题的话，要用 %f 输出。。。

我以后还是用C++交题吧，虽然语法比较严格，但不像G++那样不规范。。。



#incl...]]></description><category></category></item><item><title><![CDATA[poj 1568                                                       分类：            poj             templa...]]></title><link>https://blog.youkuaiyun.com/aa288288/article/details/101637817</link><guid>https://blog.youkuaiyun.com/aa288288/article/details/101637817</guid><author>aa288288</author><pubDate>Sat, 08 Aug 2015 16:09:00 +0800</pubDate><description><![CDATA[博弈搜索，Alpha−Beta 剪枝



Alpha−Beta 剪枝：

令 alpha = max{beta = min{alpha′}}

如果在搜索的过程中，beta&lt;=alpha，那么beta 对 alpha的值将没有贡献，对 beta 不必继续搜索。

同理，如果 alpha′&gt;=beta，那么alpha′ 对 beta的值将没有贡献，对 ...]]></description><category></category></item><item><title><![CDATA[codeforces 558C                                                       分类：            codeforces     ...]]></title><link>https://blog.youkuaiyun.com/aa288288/article/details/101637821</link><guid>https://blog.youkuaiyun.com/aa288288/article/details/101637821</guid><author>aa288288</author><pubDate>Sat, 08 Aug 2015 14:15:00 +0800</pubDate><description><![CDATA[将每个数转成二进制的形式，可以发现对每个数的操作只会使二进制数中的 ‘1’减少，

而有效的目标状态一定不大于 max{a[i]}， 所以每个数能扩展出的有效状态只有 2*log max{a[i]} 种，而这个范围是非常小的。。。

可以用搜索处理出每个数能扩展出的有效状态以其代价。

最后枚举目标状态，更新答案即可。





#include &lt;cstd...]]></description><category></category></item><item><title><![CDATA[template                                                       分类：            templates             ...]]></title><link>https://blog.youkuaiyun.com/aa288288/article/details/101637815</link><guid>https://blog.youkuaiyun.com/aa288288/article/details/101637815</guid><author>aa288288</author><pubDate>Sat, 08 Aug 2015 13:55:00 +0800</pubDate><description><![CDATA[#include &lt;cstdio&gt;
#include &lt;cstdlib&gt;
#include &lt;cstring&gt;
#include &lt;cmath&gt;
#include &lt;ctime&gt;
#include &lt;string&gt;
#include &lt;map&gt;
#include &lt;vector&...]]></description><category></category></item><item><title><![CDATA[codeforces Round 314 div.2                                                       分类：            code...]]></title><link>https://blog.youkuaiyun.com/aa288288/article/details/101637818</link><guid>https://blog.youkuaiyun.com/aa288288/article/details/101637818</guid><author>aa288288</author><pubDate>Sat, 08 Aug 2015 13:52:00 +0800</pubDate><description><![CDATA[这次比赛是用小号打的，于是现在小号比大号rating高。。。QwQ





A题和B题很简单不多说。

C题：统计子序列中长度为3，公比为 k 的等比序列的个数。

从后往前处理，分别统计满足条件长度为1,2,3的序列的个数， 
f(i,j)=∑f(i−1,t)|t=j∗k，实现时离散化一下就好~

然而，当时只判断了 a[i]*k&lt;=a[max] ，而没...]]></description><category></category></item><item><title><![CDATA[bzoj 1999                                                       分类：            bzoj             noip...]]></title><link>https://blog.youkuaiyun.com/aa288288/article/details/101637813</link><guid>https://blog.youkuaiyun.com/aa288288/article/details/101637813</guid><author>aa288288</author><pubDate>Fri, 07 Aug 2015 23:37:00 +0800</pubDate><description><![CDATA[树网的核 加强版，好题~



可以证明，如果存在多条直径，选取任意一条直径都是等价的。



证明：

如图，考虑两条直径 AB, CD，其中它们的重合部分为 EF

 A                           B
  \                         /                         
   \        ...]]></description><category></category></item><item><title><![CDATA[bzoj 2821                                                       分类：            bzoj             2015...]]></title><link>https://blog.youkuaiyun.com/aa288288/article/details/101637816</link><guid>https://blog.youkuaiyun.com/aa288288/article/details/101637816</guid><author>aa288288</author><pubDate>Fri, 07 Aug 2015 18:38:00 +0800</pubDate><description><![CDATA[因为强制在线，所以无法用莫队算法。。。

将序列分块，设块的大小为 X。

首先预处理出第 i 块到第 j 块的答案，复杂度O(N2X)。

然后对于每个询问，我们对整块以外的数重新计算对答案的贡献即可。 
时间复杂度 O(NX∗logN)

根据基本不等式，每块的大小为 N/logN−−−−−−−√。

时间复杂度：O(M∗N∗logN−−−−−−−√)



...]]></description><category></category></item><item><title><![CDATA[bzoj 2743                                                       分类：            bzoj             2015...]]></title><link>https://blog.youkuaiyun.com/aa288288/article/details/101637811</link><guid>https://blog.youkuaiyun.com/aa288288/article/details/101637811</guid><author>aa288288</author><pubDate>Fri, 07 Aug 2015 18:22:00 +0800</pubDate><description><![CDATA[这道题的方法虽然应用不广，但很有意思。



主要是维护起始点固定时，每个结束点的答案

每个点记录下一个与它颜色相同的点的位置，记为next[]。

首先对于所有首次出现的点 x，将 next[x] ~ n 的答案都增加 1 
然后就得到了当起始点为1时，每个结束点的答案。

如果起始点pos向右移动，next[pos]~next[next[pos]] - 1 ...]]></description><category></category></item><item><title><![CDATA[hdu 5068                                                       分类：            hdu             2015-0...]]></title><link>https://blog.youkuaiyun.com/aa288288/article/details/101637814</link><guid>https://blog.youkuaiyun.com/aa288288/article/details/101637814</guid><author>aa288288</author><pubDate>Fri, 07 Aug 2015 18:07:00 +0800</pubDate><description><![CDATA[一道好题~



用矩阵代替DP方程。

对于每个房间构造一个矩阵mat，mat[i][j] = 1 或 0 表示 i 到 j 是否能到达。 



然后线段树每个结点维护区间区间矩阵乘法的结果

对于询问操作用矩阵乘法合并区间即可。



#include &lt;cstdio&gt;
#include &lt;cstdlib&gt;
#include &lt;...]]></description><category></category></item><item><title><![CDATA[bzoj 3211                                                       分类：            bzoj             2015...]]></title><link>https://blog.youkuaiyun.com/aa288288/article/details/101637808</link><guid>https://blog.youkuaiyun.com/aa288288/article/details/101637808</guid><author>aa288288</author><pubDate>Fri, 07 Aug 2015 18:00:00 +0800</pubDate><description><![CDATA[分析一下，每个数最多只会做5次开根操作就会小于或等于1，在这之后它的值就不会改变。。。

用线段树记录区间的最大值，然后只对max &gt; 1 的区间做开根操作即可。

时间复杂度：O(M∗logN+N)





#include &lt;cstdio&gt;
#include &lt;cstdlib&gt;
#include &lt;cstring&gt;
...]]></description><category></category></item></channel></rss>