<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[A Cube Master]]></title><description><![CDATA[一个Cuber的ACM历程]]></description><link>https://blog.youkuaiyun.com/squee_spoon</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; squee_spoon]]></copyright><item><title><![CDATA[CF 797F Mice and Holes(单调队列优化dp)]]></title><link>https://blog.youkuaiyun.com/squee_spoon/article/details/70677948</link><guid>https://blog.youkuaiyun.com/squee_spoon/article/details/70677948</guid><author>squee_spoon</author><pubDate>Tue, 25 Apr 2017 10:55:27 +0800</pubDate><description><![CDATA[F. Mice and Holes 
先给老鼠和洞排序，然后dp解之dp[i][j]表示前i个洞进了j个老鼠的最小cost，很容易想到O(n∗n∗m)O(n*n*m)的做法。然后试了下类似多重背包的方法去优化，结果T了。。 
看了下官方题解，给的方案是用单调队列优化。因为我们要从dp[i-1][j-1],dp[i-1][j-2],dp[i-1][j-3]…转移到dp[i][j]，每个不同的状态转移过]]></description><category></category></item><item><title><![CDATA[CF 793D  Presents in Bankopolis]]></title><link>https://blog.youkuaiyun.com/squee_spoon/article/details/70677119</link><guid>https://blog.youkuaiyun.com/squee_spoon/article/details/70677119</guid><author>squee_spoon</author><pubDate>Tue, 25 Apr 2017 10:36:32 +0800</pubDate><description><![CDATA[D. Presents in Bankopolis一个有向图，节点“有序”，找一条长度为k的最短路径，额外要求是当前边不能“跃过”已经经过的节点。 
起点的选择范围是[1,n]然后每经过一个点，下一个能到达的点的范围就会缩小，注意到总可以用一个连续的范围表示之，记为[l,r]。那么用dp解决，状态dp[l][r][k]表示可达范围是[l,r]，已经走了k步。 
貌似dp写成记忆化搜索更符合我的思维，]]></description><category></category></item><item><title><![CDATA[Codeforces VK Cup 2017 - Round 2]]></title><link>https://blog.youkuaiyun.com/squee_spoon/article/details/70207556</link><guid>https://blog.youkuaiyun.com/squee_spoon/article/details/70207556</guid><author>squee_spoon</author><pubDate>Mon, 17 Apr 2017 09:20:43 +0800</pubDate><description><![CDATA[A. Voltage Keepsake二分答案。B. Volatile Kite把问题转换为求每个点到相邻2点组成的线段的距离。C. Vulnerable Kerbals这题有点意思。我们可以推出这样的结论，当前缀的积(mod m)与m互质时，添加一个数，前缀积可以转换为所有数；但是当前缀的积(mod m)与m的最大公约数为gcd时，添加一个数，只能转换为gcd的倍数。所以策略是先转化为与m的最大公]]></description><category></category></item><item><title><![CDATA[Codeforces problem 750E New Year and Old Subsequence]]></title><link>https://blog.youkuaiyun.com/squee_spoon/article/details/65628924</link><guid>https://blog.youkuaiyun.com/squee_spoon/article/details/65628924</guid><author>squee_spoon</author><pubDate>Fri, 24 Mar 2017 11:34:58 +0800</pubDate><description><![CDATA[New Year and Old Subsequence　　我们的目标是得到含有’2017’而不含有’2016’的子序列，有多次查询，用线段树解决。在线段树的每个节点中，开一个5*5的二维数组arr[i][j]，表示该区间为了能够出现’2017’中的[i,j)子序列而不会出现[i,j]子序列，并且不会出现’2016’，需要删除的最少字符数。 
 　　比如arr[0][2]表示该区间能够出现’20’但]]></description><category></category></item><item><title><![CDATA[VK Cup 2017 - Round 1]]></title><link>https://blog.youkuaiyun.com/squee_spoon/article/details/65442077</link><guid>https://blog.youkuaiyun.com/squee_spoon/article/details/65442077</guid><author>squee_spoon</author><pubDate>Thu, 23 Mar 2017 12:22:27 +0800</pubDate><description><![CDATA[感觉自己代码能力太差了，这场比赛的题都调得很痛苦。。C. Bear and Tree Jumps　　对于一棵有根树来说，dfs可以得到每个节点到树根的距离。注意到跳跃距离最大为5，我们可以把距离最多分为五类，同样地，dfs出所有节点到根的距离信息。 
　　我的解法分为两次dfs。第一次dfs可以得到节点1为树根时的距离信息。第二次dfs的目的是“换根”，也就是让每个节点以dfs序作为树根，统计与当前]]></description><category></category></item><item><title><![CDATA[Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined)]]></title><link>https://blog.youkuaiyun.com/squee_spoon/article/details/56496144</link><guid>https://blog.youkuaiyun.com/squee_spoon/article/details/56496144</guid><author>squee_spoon</author><pubDate>Wed, 22 Feb 2017 20:25:47 +0800</pubDate><description><![CDATA[这把比赛题目不错，然而打得太挫了。。来写一发题解C. Jon Snow and his Favourite Number基本上是暴力模拟，不过排序和异或要写O(1000)O(1000)的。#include <bits/stdc++.h>
using namespace std;const int maxn = 100010;
int n,k,x;int cnt[1024][2];int main()]]></description><category></category></item><item><title><![CDATA[Codeforces 8VC Venture Cup 2017 - Elimination Round]]></title><link>https://blog.youkuaiyun.com/squee_spoon/article/details/54620110</link><guid>https://blog.youkuaiyun.com/squee_spoon/article/details/54620110</guid><author>squee_spoon</author><pubDate>Thu, 19 Jan 2017 22:45:56 +0800</pubDate><description><![CDATA[C. PolandBall and Forest简单并查集，把相关节点合并即可。#include <bits/stdc++.h>using namespace std;#define ll long longint p[10010];  
int a[10010];int find(int x){  
    if(x!=p[x])p[x]=find(p[x]);  
    return p[x]]]></description><category></category></item><item><title><![CDATA[Codeforces Round #380 (Div. 1, Rated, Based on Technocup 2017 - Elimination Round 2)]]></title><link>https://blog.youkuaiyun.com/squee_spoon/article/details/53246579</link><guid>https://blog.youkuaiyun.com/squee_spoon/article/details/53246579</guid><author>squee_spoon</author><pubDate>Sun, 20 Nov 2016 22:29:18 +0800</pubDate><description><![CDATA[比赛的时候过了3题的pretest，结果systest怒跪2题。。rank几乎垫底。但是这场题目确实比较简单。A. Road to Cinema　　cf特别爱出的二分题。。二分汽油容量，得到一个最小的能跑完的容量，然后在满足这个最小值的车里面找最便宜的。注意可能全程加速也赶不上。#include <bits/stdc++.h>using namespace std;#define ll long l]]></description><category></category></item><item><title><![CDATA[TopCoder SRM 696]]></title><link>https://blog.youkuaiyun.com/squee_spoon/article/details/52245972</link><guid>https://blog.youkuaiyun.com/squee_spoon/article/details/52245972</guid><author>squee_spoon</author><pubDate>Thu, 18 Aug 2016 23:43:06 +0800</pubDate><description><![CDATA[给了20条边，最多会涉及到40个点。我们可以先贪心把那些肯定不会影响结果的点先染色（比如度为0的点和度为1的点，如果一条边连接的两个点度都是1，那么先只染一个，不然会有花费）。贪心过后，最多剩下20个点，这样就可以状压dp了。#include <bits/stdc++.h>
using namespace std;#define ll long longint deg[55];
bool vis[5]]></description><category></category></item><item><title><![CDATA[TopCoder SRM 697 div1]]></title><link>https://blog.youkuaiyun.com/squee_spoon/article/details/52245913</link><guid>https://blog.youkuaiyun.com/squee_spoon/article/details/52245913</guid><author>squee_spoon</author><pubDate>Thu, 18 Aug 2016 23:29:23 +0800</pubDate><description><![CDATA[题目要求abiimodpi=0a_i^{b_i}modp_i = 0，也就是aia_i的每个素因子个数的bib_i倍都大于等于pip_i相应的因子个数。其实我们可以让aia_i只有一个素因子，比如说2，也就是如果存在解，那么一定存在aia_i均为2的整数幂的解。 
 　　设sum=∑i=0n−1aisum=\sum_{i=0}^{n-1}{a_i} 
 　　我们得到一组不等式，对于所有的ii有ai×]]></description><category></category></item><item><title><![CDATA[计蒜之道2016 总决赛]]></title><link>https://blog.youkuaiyun.com/squee_spoon/article/details/52142918</link><guid>https://blog.youkuaiyun.com/squee_spoon/article/details/52142918</guid><author>squee_spoon</author><pubDate>Sun, 07 Aug 2016 15:53:21 +0800</pubDate><description><![CDATA[虽然说我已经身败名裂了，但还是很感谢蒜头。 
　　今年复赛打了rank60+(去年好像是爆零了，不过今年确实简单些)，结果前面有的人不去把机会让给了我。 
　　蒜头还特别土豪，帮买了机票，开了五星级酒店（里面各种高端设施，找拖鞋还找了很久），把选手都当成爷，伺候得很好，唯一办挫的事大概就是最后一天选的旅游团大坑。]]></description><category></category></item><item><title><![CDATA[hdoj 5765 Bonds]]></title><link>https://blog.youkuaiyun.com/squee_spoon/article/details/52090299</link><guid>https://blog.youkuaiyun.com/squee_spoon/article/details/52090299</guid><author>squee_spoon</author><pubDate>Tue, 02 Aug 2016 00:10:32 +0800</pubDate><description><![CDATA[设AA为nn个点的非空真子集，UU为全集。枚举无序对(A,U−A)(A,U-A)，如果AA和U−AU-A内的点都连通（关于连通性的判定，需要使用比较快的bfs方法），那么连接这两个集合的边是图的一个割。首先统计所有割的总数tottot，然后对于每个(A,U−A)(A,U-A)对应的割，AA内部的边和U−AU-A内部的边显然不在割中，dp计算每条边不在多少个割中即可，tottot减去它就是答案。#in]]></description><category></category></item><item><title><![CDATA[hdoj 5773 The All-purpose Zero]]></title><link>https://blog.youkuaiyun.com/squee_spoon/article/details/52089593</link><guid>https://blog.youkuaiyun.com/squee_spoon/article/details/52089593</guid><author>squee_spoon</author><pubDate>Mon, 01 Aug 2016 22:05:26 +0800</pubDate><description><![CDATA[很不错的LIS题，做法基于普通O(nlogn)O(nlogn)的LIS算法。由于0可以变为任何数，那么只要出现一个0，就可以接在每个长度的LIS后面，使得每个长度+1的LIS的最小结尾，是原来这个长度LIS的最小结尾+1。但是如果每次出现0，就去维护整个序列是不划算的，考虑到改变的相对性，只要出现了0，我们就可以让后面的数都-1。#include <bits/stdc++.h>using names]]></description><category></category></item><item><title><![CDATA[(中国剩余定理模版)hdoj 5768 Lucky7]]></title><link>https://blog.youkuaiyun.com/squee_spoon/article/details/52068931</link><guid>https://blog.youkuaiyun.com/squee_spoon/article/details/52068931</guid><author>squee_spoon</author><pubDate>Fri, 29 Jul 2016 21:55:22 +0800</pubDate><description><![CDATA[解(1<<(n+1))-1个同余方程组，然后容斥。作为中国剩余定理的模版。#include <iostream>    
#include <stdio.h>    
#include <cmath>    
#include <algorithm>    
#include <string>  
#include <string.h>       
#include <vector>    
#i]]></description><category></category></item><item><title><![CDATA[积分!!! hdoj 5761 Rower Bo]]></title><link>https://blog.youkuaiyun.com/squee_spoon/article/details/52068697</link><guid>https://blog.youkuaiyun.com/squee_spoon/article/details/52068697</guid><author>squee_spoon</author><pubDate>Fri, 29 Jul 2016 21:15:33 +0800</pubDate><description><![CDATA[第一次做高等数学题，比赛的时候不会解微分方程，模拟积分过程，精度不够。。其实我感觉这种题，如果让手动分微元模拟积分，才能体现出计算机的作用，不然就是纯数学题。 
　　后来发现，解微分方程是相对复杂的，可以巧妙列积分方程去解。 
　　设前进方向与y轴反方向的夹角θ\theta是时间tt的函数，即θ=θ(t)\theta=\theta(t)，经过时间TT达到目的地。 
　　对水平方向，在水流的作用下时刻]]></description><category></category></item><item><title><![CDATA[hdoj 5754 Life Winner Bo]]></title><link>https://blog.youkuaiyun.com/squee_spoon/article/details/52041011</link><guid>https://blog.youkuaiyun.com/squee_spoon/article/details/52041011</guid><author>squee_spoon</author><pubDate>Wed, 27 Jul 2016 00:43:17 +0800</pubDate><description><![CDATA[这把多校打得非常崩，来补一下。找规律的话，感觉后是最难的，马次之，好久不碰威佐夫博弈了，复习一下，模型是这样的：有两堆石子，两人轮流拿，可以从其中一堆拿任意个，或者两堆拿相同个数，拿完的人赢。假设当前两堆分别是nn和mm(m>n)(m>n)，必败状态是n=(m−n)∗(5√+1)/2n = (m-n)*(\sqrt{5}+1)/2。后打表也可以（我的第一发AC就是打表的）。#include <ios]]></description><category></category></item><item><title><![CDATA[Codeforces Round #363 (Div. 1) C LRU]]></title><link>https://blog.youkuaiyun.com/squee_spoon/article/details/52040852</link><guid>https://blog.youkuaiyun.com/squee_spoon/article/details/52040852</guid><author>squee_spoon</author><pubDate>Tue, 26 Jul 2016 23:57:43 +0800</pubDate><description><![CDATA[C. LRU　　按最近最少使用原则，维护nn首歌曲的缓存，缓存容量为kk，只有最近出现过的kk首歌会出现在缓存内。每首歌有一定的被选择的概率，问很长时间以后每首歌出现在缓存中的概率。 
　　倒过来考虑，问题等价于不断按给定概率选取歌曲，直到选取了kk首为止，问每首歌被选择的概率。 
　　用一个20位的二进制数来表示歌曲的集合，dp求每个集合可取得的概率，具体见代码。#include <bits/st]]></description><category></category></item><item><title><![CDATA[TopCoder SRM 694]]></title><link>https://blog.youkuaiyun.com/squee_spoon/article/details/51878386</link><guid>https://blog.youkuaiyun.com/squee_spoon/article/details/51878386</guid><author>squee_spoon</author><pubDate>Mon, 11 Jul 2016 09:42:03 +0800</pubDate><description><![CDATA[250　　让把nn个数(范围0~255)分成三份，每份全异或起来，使得三份的和最大。很容易想到三维256*256*256的dp。实际上需要省去一维才行，毕竟知道了前两维，可以算出第三维。 
　　然而比赛的时候我用的另一种写法。#include <bits/stdc++.h>
using namespace std;#define ll long longstruct node{
    short]]></description><category></category></item><item><title><![CDATA[Codeforces Round #361 (Div. 2)]]></title><link>https://blog.youkuaiyun.com/squee_spoon/article/details/51854393</link><guid>https://blog.youkuaiyun.com/squee_spoon/article/details/51854393</guid><author>squee_spoon</author><pubDate>Thu, 07 Jul 2016 21:23:57 +0800</pubDate><description><![CDATA[C. Mike and Chocolate Thieves　　二分搜。#include <bits/stdc++.h>using namespace std;#define ll long longll a[200000+10];int main(){
    for(ll i = 2;i<=200000;i++){
        a[i] = i*i*i;
    }    ll r = 1e1]]></description><category></category></item><item><title><![CDATA[cdq分治 -- CF edu13 F Lena and Queries]]></title><link>https://blog.youkuaiyun.com/squee_spoon/article/details/51836930</link><guid>https://blog.youkuaiyun.com/squee_spoon/article/details/51836930</guid><author>squee_spoon</author><pubDate>Wed, 06 Jul 2016 10:16:00 +0800</pubDate><description><![CDATA[F. Lena and Queries　　我的第一道cdq分治，简直绝妙。。由于点会被删除，相当于每个点有一个作用区间[l,r][l,r]。对询问分治，每次在分治区间内求凸壳（只使用作用区间包含分治区间的那些点求），更新答案。至于每个点出现在了哪些区间，用线段树维护。#include <bits/stdc++.h>using namespace std;#define ll long longcon]]></description><category></category></item></channel></rss>