上一页 1 ··· 6 7 8 9 10 11 12 13 14 ··· 16 下一页
摘要: 题意:给你一个 alpha[26],alpha[i]存的是第i个字符的所有下标,所以每次找的时候就一个upper_bound就可以了。然后就在这个自动机上走就是了,每次走到NULL结点的时候cnt++. 如果当前在根结点仍然不能往下匹配到下一个T串的点的时候就说明是-1。题目还是挺简单的,不知道为什么当时没什么人过,赛后也没什么人做。。- -0#pragma warning(disable:4996)#include#include#include#include#include#include#include#define ll long long#define maxn 10500usin 阅读全文
posted @ 2014-03-06 18:27 chanme 阅读(891) 评论(0) 推荐(0) 编辑
摘要: 题意:给你一个无向有权的图,图上的点被分成了几类,对于同类的点你需要判断它们之间相互的最短距离是不是0.满足这个条件之后要输出的是类与类之间的最短距离的矩阵。点给到10^5这么多,判断同类的点显然不能跑最短路,所以直接的方法必然是并查集,对边为0的点做一次并查集,对同类的点判一下find(x)==find(y)就可以了。 然后就是将同类的点抽象出一个新的点,这个时候只有500个点,然后就可以跑一下floyd了。 题意有坑的地方,所以没有AC比赛的时候。 这题倒是很好的练了一下基础的内容并查集和floyd。#pragma warning(disable:4996)#include#include 阅读全文
posted @ 2014-03-06 02:21 chanme 阅读(336) 评论(0) 推荐(0) 编辑
摘要: 非常裸的一棵Splay树,需要询问的是区间gcd,但是区间上每个数分成了两种状态,做的时候分别存在val[2]的数组里就好。区间gcd的时候基本上不支持区间的操作了吧。。不然你一个区间里加一个数gcd都不知道怎么维护了,所以维护点的gcd是比较简单的,题目存在删除和增加,所以Splay树无误了。删除一个结点或区间的方法是先把它get出来,然后令root->ch[1]->ch[0]=null,记得每次操作完要提根。#pragma warning(disable:4996)#include#include#include#include#define ll long long#defi 阅读全文
posted @ 2014-03-03 19:22 chanme 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 题意简洁明了。做这题主要是温习一下phi的求法。令gcd(i,n)=k,实际上我们只需要求出有多少个i使得gcd(i,n)=k就可以了,然后就转化成了求phi(n/k)的和,但是n很大,我们不可能预处理出所有的phi,但是因为k的个数是O(sqrt(n))级别的,所以我们只需要求出sqrt(n)个数的phi就可以了,我们先预处理出所有的质因子及其个数,然后dfs一下就可以了。#pragma warning(disable:4996)#include#include#include#include#include#include#define ll long longusing namespac 阅读全文
posted @ 2014-03-01 23:14 chanme 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 昨天的CF自己太挫了。一上来看到A题,就有思路,然后马上敲,但是苦于自己很久没有敲计数的题了,许多函数都稍微回忆了一阵子。A题的主要做法就是将每个数质因数分解,统计每个质因子的个数,对于每个质因子pi的个数k,等价于解一个方程x1+x2+...+xn=k的有多少个非负整数解,学过离散数学或者一些组合数学的就会知道,答案是C(k,n+k-1),但是由于n+k-1可能会很大,我一开始考虑小了,贡献了好多次RE,所以在算组合数的时候只能算出每个数的阶乘以及对应的逆元去算,然后将每个因子算出来的结果乘起来就可以了。B的话写一下就会发现很明显的能够裂项,所以问题就转换成求u(n),v(n),n的大小达到 阅读全文
posted @ 2014-02-27 16:26 chanme 阅读(281) 评论(0) 推荐(0) 编辑
摘要: 这道题当时做的时候觉得是数论题,包含两个01串什么的,但是算重复的时候又很蛋疼,赛后听说是字符串,然后就觉得很有可能。昨天队友问到这一题,在学了AC自动机之后就觉得简单了许多。那个时候不懂AC自动机,不知道什么是状态,因此没有想到有效的dp方法。题意是这样的,给定两个RD串,譬如RRD,DDR这样子的串,然后现在要你向右走(R)m步,向下走(D)n步,问有多少种走法能够包含给定的两个串。一个传统的dp思想是这样的 dp[i][j][x][y][k],表示走了i步R,j步D,x,y表示两个串各匹配了多少各,k表示的是1,2串匹配的一个4进制数(00,01,10,11,你懂的,11表示都匹配了,1 阅读全文
posted @ 2014-02-26 16:59 chanme 阅读(409) 评论(0) 推荐(0) 编辑
摘要: 很早之前听说有一种dp是在图上的dp,然后是在跑SPFA的时候进行dp,所以特地找了一题关于在SPFA的时候dp的。题意:1~a是村庄 a+1~a+b是城堡,存在m条无向边。求由a+b->1的最短路,但是你有很多飞鞋,每双飞鞋可以跑一个固定的距离l,但是跑的时候要是碰到了城堡就要停下来,而且也不能停在路中间。思路和代码参考了下面的这个网址:http://blog.csdn.net/acm_cxlove/article/details/8679230思路:正常来说我们就跑SPFA就可以了,每次从队列里取点更新,但因为有了跑鞋,所以每次取点的时候还有多一种转移途径,因此我们就需要知道每次用了 阅读全文
posted @ 2014-02-25 22:54 chanme 阅读(307) 评论(0) 推荐(0) 编辑
摘要: 题目的介绍以及思路完全参考了下面的博客:http://blog.csdn.net/acm_cxlove/article/details/7964739做这道题主要是为了加强自己对SPFA的代码的训练以及对树dp的一些思路的锻炼。我特地研究了一下树dp的部分for (int i = t; i >= w; i--){ for (int j = i-w; j >= 0; j--){ dp[u][i] = max(dp[u][i], dp[u][j]+dp[v][i - j - w]); } }循环里面是不能搞错顺序的,外层的i逆序显然,但为什么里层会有问题呢? 因为w是可以=0的,这.. 阅读全文
posted @ 2014-02-25 16:54 chanme 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 典型的最短路问题,但是多了一个条件,就是每个点属于一个layer,相邻的layer移动,如x层移到x+1层需要花费c.一种显而易见的转化是我把这些边都建出来,但是最后可能会使得边变成O(n^2);网上看到的一些做法就是拆点,假如我给每层做一个平台点,所有点都可以到这个平台,然后再换乘到别的平台里不就可以了吗? 所以对于属于第i层的点我们构造一个i层点的虚拟点,把这些点连到这个平台点,花费为0,相邻平台点之间的花费为c不就可以了吗? 但是问题就出现在这里了,这样的话同一层的点的花费就会变成0,原本可能不可达的变得可达。网上看到的拆点方法有这么两种。A.每层拆两个点,一个点管入,一个点管出,这样的 阅读全文
posted @ 2014-02-25 00:10 chanme 阅读(953) 评论(0) 推荐(0) 编辑
摘要: 又是区间第k大,这次选择这道题是为以后写线段树套平衡树铺路的。Range Tree可以理解成线段树套vector吧,相当于每个结点多存了对应区间的一个排好序的序列。画一下就会知道空间的消耗是nlogn的。然后我们只需要二分答案就可以了,二分的时候相当于是在logn个不相交的小区间里询问#include#include#include#include#include#define maxn 100000using namespace std;vector dat[4*maxn + 50];int a[maxn + 50];int n, q;void build(int k, int l, int 阅读全文
posted @ 2014-02-24 21:04 chanme 阅读(304) 评论(0) 推荐(0) 编辑
上一页 1 ··· 6 7 8 9 10 11 12 13 14 ··· 16 下一页