- 博客(153)
- 收藏
- 关注
原创 换博客了。。。。。。
终于还是换博客了,csdn很好,其实我只是想换个心情重新开始,这几天搭建博客感觉还是很有趣的。。jayye.github.io现在真是是开始写博客了,欢迎来踩
2014-11-28 18:11:09 1273
原创 HDU4949 Light (轮廓线dp)
题意:给你一个01矩阵,有两种操作:第一种: 把a(i,j)的周围四个都异或一下第二种: 把a(i, j)的周围四个和a(i,j)都异或一下求把矩阵变成全0矩阵的最少操作次数思路:如下图所示的轮廓线dp,逐格递推的,cur为当前决策的格子,红色线就是轮廓线,轮廓线以上的格子的操作状态都已经确定了,而对下面状态有影响的只有黄色格子,每个格子保存的是格子当前的数和它自己操作了多
2014-08-15 18:52:34 1827
原创 高精度模板 (进制优化)
/* 高精度模版*/#include #include #include #include #include #include using namespace std;const int numlen = 2005; // 需要的位数const int numbit = 4; // 数组一位表示的整数const int addbit
2014-08-13 10:17:19 1091 1
原创 HDU 4914 Linear recursive sequence(矩阵乘法递推的优化)
题解见X姐的论文 矩阵乘法递推的优化,只是mark一下。。#include #include #include #include using namespace std;typedef __int64 ll;const double pi = acos(-1.0);const int N = 10000+5;const double eps = 1e
2014-08-10 14:42:37 2400
原创 HDU 4896 Minimal Spanning Tree(矩阵快速幂)
题意:给你一幅这样子生成的图,求最小生成树的边权和。思路:对于i >= 6的点连回去的5条边,打表知907^53 mod 2333333 = 1,所以x的循环节长度为54,所以9个点为一个循环,接下来的9个点连回去的边都是一样的。预处理出5个点的所有连通状态,总共只有52种,然后对于新增加一个点和前面点的连边状态可以处理出所有状态的转移。然后转移矩阵可以处理出来了,快速幂一
2014-08-04 20:13:11 1664
原创 ACdream 1148 GCD SUM (久违的莫比乌斯)
题目链接题意:给出N,M执行如下程序:long long ans = 0,ansx = 0,ansy = 0;for(int i = 1; i for(int j = 1; j if(gcd(i,j) == 1) ans ++,ansx += i,ansy += j;cout 思路: 首先要会莫比乌斯,然后对于ans,自然是非常好求
2014-08-04 13:48:14 1304
原创 HDU 4887 Endless Punishment (矩阵离散对数)
题意: 给你两个长度为n(n 思路:由于n普通的离散对数 http://blog.csdn.net/jayye1994/article/details/11961635矩阵离散对数的话,由于总状态数只有2^31,x不会超过总状态数,假设tot是总状态数,定义m = sqrt(tot) + 1,先处理出C * B^i (0 code:{CSDN:CODE:4
2014-08-03 21:21:47 2574 6
原创 HDU2481 Toy (数论好题)
该题果然是个好题啊!题意来自上一题, ( http://blog.csdn.net/jayye1994/article/details/37814965 ) BZOJ 1002: [FJOI2007]轮状病毒上一题是旋转后相同视为不同情况,这题旋转后相同视为同一种情况。就这么一个小小的区别,上一题用到了dp,这一题用到了dp、筛素数、二进制模拟乘法、矩阵、快速幂、欧拉函数、b
2014-07-15 15:53:08 1808
原创 BZOJ 1002: [FJOI2007]轮状病毒
好久好久好久好久没写博客了,由于csdn改版了,一直不大喜欢,所以也就不大乐意上博客了。。其实说起来也没什么题好写的,有时候还是会做到好题的,由于已经忘记了csdn忘记了我有博客,于是就没写了。but 现在还是继续开始吧,有什么感觉不错的题还是可以mark下的。接下来是题意,中文题就是好,直接上题目。。 给定n(N思路:题目就是求最小生成树的种数,中心的点必须要
2014-07-15 14:47:48 3045 1
原创 省赛总结
时隔一年又来到了浙大紫金港,想起去年的自己太年轻,打得一手好酱油,读得一手好题意。这次居然没有查过字典!!难道我的英语已经出神入化了?似乎已经很吊的样子,嗯,这下应该能过四级了! 11:40,铭神曰:人有三急,我去去就来。 嗯反正比赛是12:30开始吧?慢慢来。。12:00,突然广播里说比赛正式开始!铭神还没来。。先看题了,A题水题6min 1Y,铭神终于来了。。L水题14min
2014-04-13 20:23:37 1542 14
原创 BZOJ 1951: [Sdoi2010]古代猪文 (数论各种定理)
题目链接题意:给你N,G, 求G^( sigma( C(N, d) ) ) % MOD, d为N的因数 , MOD = 999911659思路:根据 指数循环节 可知ans = G^( sigma( C(N, d) )%(MOD-1) + MOD-1 ) %MOD因为MOD-1拆成素数相乘为2*3*4679*35617,根据Lucas定理求出sigma(C(N, d)) % m, m
2014-04-09 18:52:07 2175
转载 博弈-Green Hackenbush(无向图删边)
转自:http://blog.sina.com.cn/s/blog_8f06da990101252l.htmlGreen Hackenbush Hackenbush游戏是通过移除一个有根图的某些边,直到没有与地板的相连的边。地板用虚线来表示,其中移除某一条边的时候,那条边以上所连着的所有边都会移除,就像砍树枝那样,树枝以上的部分也会被移除。 在这节中,我们讨
2014-03-26 10:46:22 1097
转载 博弈-翻硬币游戏
转自:http://blog.sina.com.cn/s/blog_8f06da99010125ol.html翻硬币游戏 一般的翻硬币游戏的规则是这样的: N 枚硬币排成一排,有的正面朝上,有的反面朝上。我们从左开始对硬币按1 到N 编号。第一,游戏者根据某些约束翻硬币,但他所翻动的硬币中,最右边那个硬币的必须是从正面翻到反面。例如,只能翻3个硬币的
2014-03-26 10:45:37 993
转载 博弈总结
以下是我从网上收集的关于组合博弈的资料汇总:有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。两个人轮流从堆中取物体若干,规定最后取光物体者取胜。这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理。下面我们来分析一下要如何才能够取胜。(一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每
2014-03-26 10:44:53 928
原创 Codeforces Round #238 (Div. 1) D题(倍增lca)
题意居然是最终可以到达的点,我居然比赛时看成要同步走同时到一个点,傻逼不能多说。。其实很简单的求个lca就可以了,前面预处理用栈维护下就行。学了倍增法求lca,果然是简单多了啊。。。#include #include #include using namespace std;const int N = 100000+5;struct Edge {
2014-03-24 21:48:18 959
原创 POJ 2104 K-th Number (可持久化线段树)
可持久化线段树(又曰函数式线段树or主席树。。)今天比赛做到这种数据结构,顿时就跪了。。是我太懒。。一直没去学。。果断学之,思想简单犀利。贴个模板#include #include #include using namespace std;const int N = 100000+5;int ls[N*20], rs[N*20], cnt[N*2
2014-03-23 21:26:01 1097
原创 lightoj 1289 LCM from 1 to n
题意: 求LCM(1, 2, 3, ... n)的值mod 2^32思路:很显然我们是要求所有的 注意这里的n#include #include using namespace std;typedef long long ll;const int N = 100000000+2;const ll MOD = 1LL<<32;unsigned
2014-03-15 10:14:56 1639
原创 ZOJ 3765 Lights (伸展树)
伸展树裸题,做了几题后已经不需要调了,像前几次经常调个好久。。听说可持久化treap更好用,调起来方便,下次学一下。code:#include #include using namespace std;#define lson x->ch[0]#define rson x->ch[1]#define ket (root->ch[1]->ch[0])con
2014-03-03 21:12:17 1786 3
原创 Codeforces Round #201 (Div. 1)
题目链接A:a, b得到a-b,然后b-(a-b)。这个过程就像求gcd的过程,很容易想到最后所有的数肯定都是gcd(a1, a2, ... an)的倍数。Code_AB:设dp[i][j][k]表示a串的i位置之前和b串的j位置之前的后缀是坏的串的前k个字符的最长的公共子序列的长度。然后转移需要处理出kmp的next数组进行转移。Code_BC
2014-02-24 21:59:18 1350
原创 HDU 3436 Queue-jumpers (Splaytree)
题意:有n个人,编号分别为1~n,从小到大排成一列,有q次操作。 (n Top操作: 把编号为x的人拿出来放到最前面。Query操作: 问编号为x的人现在在第几个。Rank操作: 问第x个人编号为多少。思路:把Top操作和Query操作的所有数离散化下,然后把n个人分成一个个区间,比如6个人,离散化编号4, 5的人,则分成区间(1, 3) (4, 4), (5, 5),
2014-02-16 17:31:15 1104
原创 HDU 1890 Robotic Sort (Splaytree 区间翻转)
第一道区间翻转的Splaytree题,其实和线段树差不多的,标记一下,该down的时候down就行了,记录每个数在伸展树中的下标然后从根到节点push down下去。不过有一个小错误倒是让我调了好久,我是加了两个边界点-1的,这样子比较好处理区间,找到那个数后Splay到根,然后要标记下左边的数,如果直接root->ch[1]->mark ^= 1会把-1也翻转,而我刚开始直接翻转所以各种出错。所
2014-02-15 23:30:20 1426 4
原创 HDU 1754 I Hate It (Splay tree和Segment tree)
线段树的模版题,求区间最值和修改一个值,用Splaytree来写更简单!伸展树code:#include #include using namespace std;#define lson x->ch[0]#define rson x->ch[1]#define ket (root->ch[1]->ch[0])const int maxn = 2
2014-02-14 18:12:23 1050
原创 BZOJ 1208: [HNOI2004]宠物收养所 (Splaytree)
用Splaytree实现插入一个节点,删除一个节点,求第k大的数,求小于某值的个数,还是挺好玩的,注意这题答案要mod一下。#include #include using namespace std;typedef long long ll; const int maxn = 80000 + 10;const int mod = 1000000;con
2014-02-14 18:07:08 1158
原创 BZOJ 1588 [HNOI2002]营业额统计 (Splaytree)
用Splaytree实现基本的插入,求前驱,求后继操作。数据有问题。。。有些数据输入n后,后面没有n个数,后面没有的数全都当成0才可以过。#include #include using namespace std;typedef long long ll; #define lson x->ch[0]#define rson x->ch[1]#defi
2014-02-13 21:33:06 903
原创 BZOJ 1503 [NOI2004]郁闷的出纳员 (Splaytree)
用Splaytree实现插入,删除一个区间,求小于某值的个数。题意有个坑。。初始工资小于工资下届不计入离开公司的总数。。#include const int maxn = 100000+10;const int INF = 1<<30;#define lson x->ch[0]#define rson x->ch[1]#define ket (roo
2014-02-13 21:29:34 1100
原创 Ural 1430. Crime and Punishment(数论)
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1430题意: 求x,y使得ax + by 思路:假设a > b,只需要暴力枚举x判断即可,上限top为min(n/a, b),复杂度是O(sqrt(n))的。证明很简单,如果x > b则可以写成 a(x + b) + by = ax + ab + by = ax + b(a+y),
2014-01-23 23:50:44 1188
原创 Ural 1286. Starship Travel (扩展欧几里得)
题意:给你p、q,初始状态(x1, y1),终点状态(x2, y2),每次操作可以是 (+p, +q), (+p, -q) , (-p, +q), (-p, -q), (+q, +p), (+q, -p), (-q, +p), (-q, -p),问初始状态能不能到终点状态。思路:对于初始状态到终止状态变化了 (x2-x1, y2-y1),设为变化了(A, B) ,得方程 px1 + q
2014-01-22 21:37:37 1211 2
原创 Ural 1268 Little Chu (原根)
对于两个正整数,由欧拉定理可知,存在正整数, 比如说欧拉函数,即小于等于 m 的正整数中与 m 互质的正整数的个数,使得。由此,在时,定义对模的指数为使成立的最小的正整数。由前知 一定小于等于 ,若,则称是模的原根。摘自维基百科这个题目就是要求一个质数n的最大的原根现在的问题就是怎么求原根,如果直接暴力是 O(nlogn * 因子数),显然是不行的。。方法:
2014-01-20 00:29:24 1641 2
原创 Codeforces Round #223 (Div. 1)
题目:http://codeforces.com/contest/380A:由于询问是单调的,直接顺着枚举每个区间即可。B:题意: 给你个高度为n的树,高度为1的节点有1个,标号为1,然后按照规律生成节点,标号为2的幂次的结点有左右儿子,其他的只有右儿子,生成高度为n的树。有两种操作,第一种在高度为 t 的标号为 l ~ r 的节点加入值x, 第二种询问高度为 t 的标号为v的
2014-01-16 20:55:21 1432 2
原创 Codeforces Round #142 (Div. 1) (完全)
题目:http://codeforces.com/contest/229A:细节要处理好,乱搞B:题意:一个有权无向图,给出每个点限制的时刻,表示不能在该点限制时刻出发到其他点,求s到t的最短路。思路:直接跑dijkstra,点出队列的判断下该时刻是否为限制时刻,如果是,往上加直到不是即可。Code_BC:题意:给你一个完全图,Alice选了m条边,剩下的都
2014-01-15 01:28:51 1454
原创 Codeforces Round #220 (Div. 2)
A:有点坑的题,最后一分钟被hack了。。。后来我的friend列表的人全挂了。。。注意下可能往某个方向一跳就会跳出界的B:坑我到死的一题,WA了之后想了几十分钟。。。就是想不出有什么问题= =不得已才放弃了。。到最后果然没问题的,重判A了C:记忆化搜索。vis数组表示该点有没被访问过,nice数组初始化为-1,nice如果为INF则表示有环,如果搜到某个点,判
2013-12-19 18:26:38 1159
原创 Codeforces Round #219 (Div. 1)
A:排序后对半分贪心小的那一半放到大的那一半。B:dp[ i ][ j ][ k ][ l ]表示(i, j)为右下角 (k, l)为左上角的矩形里的good数量那么dp[ i ][ j ][ k ][ l ] = dp[ i - 1 ][ j ][ k ][ l ] + dp[ i ][ j - 1 ][ k ][l] - dp[ i - 1 ][ j - 1 ][ k ][ l
2013-12-14 14:59:47 888
原创 Ural 1091. Tmutarakan Exams (莫比乌斯反演)
题目链接: http://acm.timus.ru/problem.aspx?space=1&num=1091题意:从1~S个数字里选出K个数使得K个数的gcd > 1的选择情况数有多少种,注意的是,如果答案大于10000,输出10000即可。K思路:很简单的莫比乌斯反演水题,设F(x)为选出k个数的gcd为x的倍数的情况数,则反演函数f(x)即为选出k个数的gcd为x的情况数就可
2013-12-13 16:03:16 1283
原创 Codeforces Round #218 (Div. 2) (线段树区间处理)
A,B大水题,不过B题逗比了题意没理解清楚,讲的太不清楚了感觉= =还是英语弱,白白错了两发。C:二分答案判断是否可行,也逗比了下。。。二分的上界开太大导致爆long long了。。。#include #include #include using namespace std;typedef __int64 ll;char s[111];int B, S
2013-12-08 21:26:07 1035
原创 Codeforces Round #143 (Div. 2) (边双联通)
C:给你一个数列,可以给某个数加上1,最多可以加k次,问操作之后相同的数的个数最多是多少。排完序可以二分答案是哪个数,也可以直接枚举维护一个左值,每次判断i到j是否可行。D:这么简单的题居然不是AB题。。E:给你一个无向图,每个点最多只在一个简单环中,问s到t有多少种路径,不能经过同一条边两次,走过的边的集合不同表示路径不同。思路:由于每个点最多只在一个简单环中,所
2013-12-05 21:37:04 1075
原创 Codeforces Round #137 (Div. 2)
C:给你n个数和m个数 n , m 思路:直接统计分子分母的所有素因子的个数,然后消去各个可以消去的素因子即可。这里我用的筛素数法是O(N)的并且顺便处理出了每个数最小的素因子,这样子的话分解素因子岂不是很简单了。。。复杂度超低nice~#include #include #include #include using namespace std;#de
2013-12-02 23:59:10 876
原创 Codeforces Round #216 (Div. 2) (又是线段树)
A:先处理type1,然后type2B:看这个数据范围直接暴力,一个一个放进去就可以了,也可以尽可能平摊这个区间,剩余的k个分给前k个就行了,反正有解的话肯定是可行的。C:简单的遍历一棵树,如果某个节点下面没有坏边并且父边是坏边,则加入答案中。#include #include #include using namespace std;const int maxn
2013-12-01 18:54:45 1293
原创 Codeforces Round #200 (Div. 1) (树上的线段树)
A:a/b,a > b的话通过串联变回(a - b)/b,a B:仔细想想其实就是个简单的栈操作,如果加入的东西和栈顶相同,则两个消掉,否则入栈。C:给你一些士兵的位置,再给你一些最后要占领的位置,问这些士兵最少需要多久使得所有要被占领的位置都被走过。思路:首先对所有士兵位置排序,给所有要占领位置排序,可以考虑最左边的占领位置肯定是由最左边的士兵来走是最优的,对于一个确
2013-12-01 14:15:20 1128
原创 Codeforces Round #215 (Div. 1)
http://codeforces.com/contest/367A:注意点细节就行了B:太伤了,比赛时候没想太多,果断开启乱搞模式,乱搞了几个哈希函数,5个乱搞!不过赛后煎熬的等待还是RE了。。。不过事实证明我的哈希乱搞是对的,有个地方没开long long判断导致错了!后来去敲正解的,居然也RE在38组!太雷了,m*p是会爆int的,总是这么不小心,所以说细心写代码比速度更更重
2013-11-28 17:59:26 1106
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人