摘要:
题意:一个棋盘,摆了四种颜色的棋子,每次选择一个棋子消掉,同时跟它相连的也会被消掉,之后1)下方有空的棋子会往下掉,填补空的格子2)如果有整列被消的掉的,该列右边的棋子全部往左移,当然,左移的界限就是到被消掉的一整列,这个看Sample就知道了分析:棋盘不大,6*6而已。一开始的感觉就是迭代加深搜索了,再搜的过程中,优先选择相连颜色中数量最多消掉,31ms,不过爆搜也可以过,600+msView Code #include<iostream>#include<algorithm>#include<queue>using namespace std;const 阅读全文
摘要:
题意:对一棵树上的点进行实时的增减权值和询问子树的权值和首先:单点修改以及子树查询。对整棵树dfs一遍,记录下欧拉序列。这样有一个好处,就是每一棵子树在这个序列中都是连续的,同时记录下每一棵子树的起始序列号,这样,对子树的查询就变成了一个连续区间的查询了,运用树状数组就可以解决了。那最大生成树呢?“Sailormoon girls want to cut extra branches by using minimum cost, after that..."额,这里要将多余的边减掉,用最小cost,也就是减掉之后,变成了一棵最大生成树。郁闷呀,一开始以为题目所给的cost是没用……… 阅读全文
摘要:
题意:纯模拟题,用N个优先队列表示ID为0~N-1的Resource再重载一下操作符即可,剩下的就是模拟了ID好的范围是10000,询问的次数也是10000,里面的hash操作是多余了,自己没有考虑清楚………………View Code #include<iostream>#include<algorithm>#include<queue>#define MAXN 10010using namespace std;struct node{ int pri,num; bool friend operator<(const node a,const node 阅读全文
摘要:
题意:求最长回文串用Manacher 可以在O(n)时间内解决#include<iostream>#include<algorithm>#include<string.h>#define MAXN 200010using namespace std;char str1[MAXN],str[MAXN*2];int rad[MAXN*2],nn,n;void Manacher(int *rad,char *str,int n){ int i; int mx = 0; int id; for(i=1; i<n; i++) { if( mx > i ) 阅读全文