摘要: 考虑暴力递归求解的情况:f(i)=min(a(i),f(i-1),f(i-2),...,f(1))由于只要参数相同,f()函数的返回值是一样的,因此导致了大量的重复计算,所以我们可以记忆下来。 1 #include 2 #include 3 #include 4 using namespace st... 阅读全文
posted @ 2014-10-27 20:17 AutSky_JadeK 阅读(231) 评论(0) 推荐(0) 编辑
摘要: http://www.cnblogs.com/BLADEVIL/p/3490321.htmlhttp://www.cnblogs.com/zyfzyf/p/3997986.html翻了翻题解,这两个合起来比较明白……题意:求1~n!中与m!互质的数的数量(mod R)。∵由欧几里得算法得gcd(a,... 阅读全文
posted @ 2014-10-27 19:42 AutSky_JadeK 阅读(462) 评论(0) 推荐(0) 编辑
摘要: 由图可知,一个人无法被看到时,当且仅当有 人与原点 的斜率与他相同,且在他之前。∴一个人可以被看到,设其斜率为y/x,当且仅当y/x不可再约分,即gcd(x,y)=1。考虑将图按对角线划分开,两部分对称,对其中的下半部分来说,枚举x,其所对应的y值(y 2 using namespace std; ... 阅读全文
posted @ 2014-10-27 15:10 AutSky_JadeK 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 好吧……我不会欧拉筛也就罢了……傻逼筛法竟然这么长时间以来 一直RE ……源头竟然是 int 爆了。 1 #include 2 #include 3 using namespace std; 4 bool vis[70000]; 5 int a,b; long long ans; 6 void Sh... 阅读全文
posted @ 2014-10-27 11:37 AutSky_JadeK 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 素数判定模板。 1 #include 2 #include 3 using namespace std; 4 int a[2001],ans=-2147483647,l,r,n,sum[2001]; 5 bool is_prime(const int &x) 6 { 7 for(int i=... 阅读全文
posted @ 2014-10-27 10:28 AutSky_JadeK 阅读(200) 评论(0) 推荐(0) 编辑
摘要: O(sqrt(n))枚举约数,根据定义暴力判断友好数。 1 #include 2 #include 3 using namespace std; 4 int n; int limit; 5 int main() 6 { 7 scanf("%d",&n); 8 for(;;n++) 9... 阅读全文
posted @ 2014-10-27 09:58 AutSky_JadeK 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 裸快速幂取模,背诵模板用。 1 #include 2 using namespace std; 3 typedef long long LL; 4 LL n=1,m,q; 5 LL Quick_Pow(LL a,LL p,LL MOD) 6 { 7 if(!p) return 1; 8 ... 阅读全文
posted @ 2014-10-27 08:59 AutSky_JadeK 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 新GET了一种卡特兰数的应用……在一个圆上,有2*K个不同的结点,我们以这些点为端点,连K条线段,使得每个结点都恰好用一次。在满足这些线段将圆分成最少部分的前提下,请计算有多少种连线的方法。不会证明,当结论记住吧。f(i)=f(i-1)*(4*n-2)/(i+1) (2 2 using namesp... 阅读全文
posted @ 2014-10-27 08:22 AutSky_JadeK 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 可以暴力递归求解,应该不会TLE,但是我们考虑记忆化优化。设f(i,j)表示第i个数为j时的方案数。f(i,j)=f(1,j-1)+f(2,j-1)+……+f(i-1,j-1) (4>=j>=1),从f(n,4)开始递归求解就行。但是考虑到状态最多只有n*4种,所以记忆化掉吧。初始化:f(i,1)=... 阅读全文
posted @ 2014-10-26 18:20 AutSky_JadeK 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 设答案为f(n),我们显然可以暴力地递归求解:f(n)=f(1)+f(2)+……+f(n/2)。但是n=1000,显然会超时。考虑状态最多可能会有n种,经过大量的重复计算,所以可以记忆下来,减少不必要的计算。 1 #include 2 using namespace std; 3 int n; 4 ... 阅读全文
posted @ 2014-10-26 17:32 AutSky_JadeK 阅读(316) 评论(0) 推荐(0) 编辑
摘要: 对于一对数(p,q),若它们的gcd为x0,lcm为y0,则:p*q/x0=y0,即q=x0*y0/p,由于p、q是正整数,所以p、q都必须是x0*y0的约数。所以O(sqrt(x0*y0))地枚举约数,依次用gcd判断。 1 #include 2 #include 3 using namespac... 阅读全文
posted @ 2014-10-26 17:08 AutSky_JadeK 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 分块 Or 线段树 分块的登峰造极之题每块维护8个值:包括左端点在内的最长1段;包括右端点在内的最长1段;该块内的最长1段;该块内1的个数;包括左端点在内的最长0段;//这四个是因为可能有翻转操作,需要swap 0有关的标记 和 1有关的标记包括右端点在内的最长0段;该块内的最长0段;该块内0的个数... 阅读全文
posted @ 2014-10-23 15:26 AutSky_JadeK 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 分块,记录每个块内包括左端点的最大连续白段的长度,整个块内的最大连续白段的长度,和包括右端点的最大连续白段的长度。Because 是区间染色,所以要打标记。至于怎样在O(sqrt(n))的时间内找到最左的白色段呢?非常恶心…… 要考虑跨块的白段和块内的白段,并且顺序不能反。(代码中YuDing()函... 阅读全文
posted @ 2014-10-21 17:38 AutSky_JadeK 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 每个房间用一个集合来维护,具体来说,就是给1-n的数每个数一个long long的hash值,往集合S里insert(i),就是S^=HASH[i];erase(i),也是S^=HASH[i]。用map/set维护某个集合是否已经做过实验。分块,对每个块维护一个maxv[i],代表当前该块内的答案值... 阅读全文
posted @ 2014-10-19 14:16 AutSky_JadeK 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 线段树入门题……因为poj原来的代码莫名RE,所以丧病地写了区间修改的分块……其实就是块上打标记,没有上传下传之类。 1 #include 2 #include 3 using namespace std; 4 int n,m,a[100001],l[400],r[400],delta[400],n... 阅读全文
posted @ 2014-10-17 15:58 AutSky_JadeK 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 考虑每次删除pos位置一个数x后,所造成的的影响就是,逆序对的个数少了在1~pos-1中大于x的数的个数加上pos+1~n中小于x的数的个数。那么我们需要的操作就只有查询区间内比某数大(小)的个数。↑,分块经典操作,每个块里维护一个有序表。由于有删除,最好每个块用一个vector。对于原数列怎么办呢... 阅读全文
posted @ 2014-10-16 17:41 AutSky_JadeK 阅读(378) 评论(0) 推荐(0) 编辑
摘要: 分块,v[i][j][k]表示第i块内第j位是k的元素数。非常好写。注意初始化要注意题意,①第i位是从右往左算的。②若x没有第i位,则用前导零补齐10位。比如103---->0000000103。 1 #include 2 #include 3 #include 4 using namespace ... 阅读全文
posted @ 2014-10-15 16:36 AutSky_JadeK 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 分块 或 树套树。在每个块中维护一个有序表,查询时各种二分,全都是分块的经典操作,就不详细说了。块的大小定为sqrt(n*log2(n))比较快。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 i... 阅读全文
posted @ 2014-10-14 18:45 AutSky_JadeK 阅读(268) 评论(0) 推荐(0) 编辑
摘要: http://www.cnblogs.com/wmrv587/p/3843681.htmlORZ 分块大爷。思路很神奇也很清晰。把 块内最值 和 块内有序 两种良好的性质结合起来,非常棒地解决了这个问题。图中黑色的楼房即为每个块内的“可视序列”,显而易见,在块内它们的K(斜率)是单增的。由于上图中第... 阅读全文
posted @ 2014-10-14 16:24 AutSky_JadeK 阅读(403) 评论(0) 推荐(0) 编辑
摘要: 分块,在每个点记录一下它之前离它最近的相同颜色的位置pre[i],显然问题转化成了求[l,r]中pre[i] 2 #include 3 #include 4 #include 5 using namespace std; 6 int n,m,sz,sum,l[30],r[30],num[10001]... 阅读全文
posted @ 2014-10-12 11:19 AutSky_JadeK 阅读(552) 评论(0) 推荐(0) 编辑
摘要: 求一个生成树,使得最大边权和最小边权之差最小。由于数据太小,暴力枚举下界,求出相应的上界。最后取min即可。 1 #include 2 #include 3 #include 4 using namespace std; 5 int n,m,fa[101],rank[101]; 6 void cle... 阅读全文
posted @ 2014-10-11 15:53 AutSky_JadeK 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 不用Matrix-tree定理什么的,一边kruscal一边 对权值相同的边 暴搜即可。将所有方案乘起来。 1 #include 2 #include 3 using namespace std; 4 int n,m; 5 struct Disjoint_Set 6 { 7 int fa[1... 阅读全文
posted @ 2014-10-11 15:33 AutSky_JadeK 阅读(238) 评论(0) 推荐(0) 编辑
摘要: http://yun.baidu.com/share/home?uk=218564097&view=share#category/type=0新手渣翻,本来就是自己听着玩的……开门红(火风/汤灿);四年(十年:陈奕迅) 附歌词,歌词 By Tian Zhanhe;我知道(by2)。 阅读全文
posted @ 2014-10-05 09:22 AutSky_JadeK 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 跟去年NOIP某题基本一样。最小生成树之后,就变成了询问连接两点的路径上的权值最大的边。倍增LCA、链剖什么的随便搞。块状树其实也是很简单的,只不过每个点的点权要记录成“连接其与其父节点的边的权值”,然后暴力LCA时不要用LCA的值更新答案了。 1 #include 2 #include 3 ... 阅读全文
posted @ 2014-10-04 09:06 AutSky_JadeK 阅读(222) 评论(0) 推荐(0) 编辑
摘要: STL裸题,线下AC,bzoj无限RE ing…… 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 using namespace __gnu_cxx; 9 usin... 阅读全文
posted @ 2014-10-03 17:13 AutSky_JadeK 阅读(298) 评论(0) 推荐(0) 编辑
摘要: SB题,求最小生成树,其中有些边已经给您建好啦。随意暴力即可。 1 #include 2 #include 3 #include 4 using namespace std; 5 int rank[10001],fa[10001],n,m,a[101][101],q,x,y,f1,f2,ans; 6... 阅读全文
posted @ 2014-10-03 15:24 AutSky_JadeK 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 建立k+1张图,在图与图之间,若在原图中x到y有边,就建立从 第i层的x 到 i+1层的y 建边,权值为0。代表一次免费机会。由于一旦到了第i+1层的图里,则无法回到之前的层,所以免费最多只有k次。符合题意。spfa会TLE。 1 #include 2 #include 3 #include 4 #... 阅读全文
posted @ 2014-09-30 10:44 AutSky_JadeK 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 题意:给你一个n*m的点阵、有些点是障碍,求一个欧几里得距离最大的点对(A,B),使得在移走的障碍≤T的情况下,可以从A走到B。建图,跑n*m次spfa,求出从 每个点 出发到 其他所有点 的 经过的障碍数。若这个值 2 #include 3 #include 4 #include 5 #inclu... 阅读全文
posted @ 2014-09-30 08:01 AutSky_JadeK 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 区间k大,分块大法好,每个区间内存储一个有序表。二分答案,统计在区间内小于二分到的答案的值的个数,在每个整块内二分、零散的暴力即可。还是说∵有二分操作,∴每个块的大小定为sqrt(n*log2(n))比较快呢。 1 #include 2 #include 3 #include 4 #include ... 阅读全文
posted @ 2014-09-29 07:15 AutSky_JadeK 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 带 加点 删边的块状树。加点在 bzoj3720 说过。删边其实就是块顶打标记,记录其属于哪棵树,防止在dfs搜集答案时跑到别的树上。然后暴力把所在块拆开。好像用邻接表存图,直接在vector里删边也行? 1 #include 2 #include 3 #include 4 #include... 阅读全文
posted @ 2014-09-28 17:35 AutSky_JadeK 阅读(360) 评论(0) 推荐(0) 编辑
摘要: 1 #include 2 #include 3 using namespace std; 4 int n,ans,v[41],c[41],s[2]; 5 int work(int L,int R)//分治 6 { 7 if(L==R) return v[L]; 8 int res... 阅读全文
posted @ 2014-09-26 21:34 AutSky_JadeK 阅读(623) 评论(0) 推荐(0) 编辑
摘要: 1 #include 2 using namespace std; 3 bool is_prime(int x) 4 { 5 for(int i=2;i*i0;q--)23 {24 ans=0;25 scanf("%d",&n);26 ... 阅读全文
posted @ 2014-09-22 19:02 AutSky_JadeK 阅读(237) 评论(0) 推荐(0) 编辑
摘要: 总时间限制:1000ms内存限制:65536kB描述输入一个布尔表达式,请你输出它的真假值。 比如:( V | V ) & F & ( F | V )V表示true,F表示false,&表示与,|表示或,!表示非。上式的结果是F输入输入包含多行,每行一个布尔表达式,表达式中可以有空格,总长度不超过1... 阅读全文
posted @ 2014-09-22 18:56 AutSky_JadeK 阅读(458) 评论(0) 推荐(0) 编辑
摘要: 块状树。教程见:http://z55250825.blog.163.com/blog/static/1502308092014163413858/将树按一定大小分块,分成许多子树,在每个子树的根节点记录一个数组,存储这个块中数据的有序表,查询时二分即可。对于添加节点操作,若添加的节点的父节点所在块大... 阅读全文
posted @ 2014-09-21 07:54 AutSky_JadeK 阅读(676) 评论(4) 推荐(0) 编辑
摘要: 很早之前用树链剖分写过,但是代码太长太难写,省选现场就写错了。 1 #include 2 #include 3 #include 4 using namespace std; 5 #define lson rt>1,ans=0; 26 if(ql>1,ans=-2147483647... 阅读全文
posted @ 2014-09-15 18:35 AutSky_JadeK 阅读(288) 评论(0) 推荐(0) 编辑
摘要: 暴力枚举。 1 #include 2 #include 3 using namespace std; 4 int n,a[101],sum[101],half,ans; 5 int query(const int &A,const int &B) 6 { 7 int x=max(A,B),y... 阅读全文
posted @ 2014-09-13 20:08 AutSky_JadeK 阅读(207) 评论(1) 推荐(0) 编辑
摘要: 考虑poj3320尺取法的做法,与此题基本一样,但是此题的 位置 的范围到2^31 尺取法不可。将每种珠子所在的位置排序。每种珠子要维护一个指针,指到已经用到这个种类的哪个珠子。所以尺取法用堆优化,每次从堆中取出最小的,相当于尺取法的头指针向后移动。然后从每种珠子里向后取出一个位置(指针++)(已经... 阅读全文
posted @ 2014-09-13 15:51 AutSky_JadeK 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 按完成时限排序,一个个修复。若当前建筑花费时间+之前花费的总时间不超过时限,则ans++;否则,从之前已修复的建筑中挑一个耗时最多的,与当前建筑比较,若当前建筑更优,则更新ans。 1 #include 2 #include 3 #include 4 using namespace std; 5 p... 阅读全文
posted @ 2014-09-13 10:46 AutSky_JadeK 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 用并查集维护联通性。对每个联通块维护一个平衡树。合并时启发式合并。比较懒,用了pb_ds。 1 #include 2 #include 3 #include 4 using namespace std; 5 using namespace __gnu_cxx; 6 using namespace _... 阅读全文
posted @ 2014-09-13 09:32 AutSky_JadeK 阅读(367) 评论(0) 推荐(0) 编辑
摘要: 对于i属于[1,n],i只能成为[1,n]中n/i个数的约数,易证。1 #include2 int n,i;3 long long ans;4 int main()5 {6 scanf("%d",&n);7 for(i=1;i<=n;i++)ans+=(long long)n/i;8... 阅读全文
posted @ 2014-09-12 20:30 AutSky_JadeK 阅读(145) 评论(0) 推荐(0) 编辑
TVアニメ「Charlotte(シャーロット)」公式サイト TVアニメ「Charlotte(シャーロット)」公式サイト