- 博客(73)
- 资源 (3)
- 收藏
- 关注
原创 HDU 4778 Gems Fight!
题意:就是有G种颜色,B个背包,每个背包有n个宝石,颜色分别为c1,c2...........。两个人轮流取背包放到公共容器里面,容器里面有s个相同颜色宝石的时候,这s个相同颜色的宝石会融合成一个魔法石。当选手选择一个背包放到公共容器里会产生魔法石,魔法石就归这个选手所有,并且奖励这个选手再选一个背包,直到不再产生魔法石为止。(每个背包只能选取一次)每个选手会尽量使自己得到的魔法石最多,问最后先手
2016-11-24 14:11:31 441
原创 HDU 5877 Weak Pair
题意;求所有点的祖先节点中与他的权值的乘积小于k 的个数的和;思路:我们在从祖先节点开始进行DFS, 当跑到该节点时,在线段树中查找比k/val[u] 小的权值的个数,并在线段树中该权值对应的点+1, 当回溯的时候该点权值的位置在-1。由于权值的范围较大,可以先将权值离散化,或者直接建立一颗手动分配内存的线段树,如果离散化树状数组也可解,当然维护一个set也是可以的。代码:#inc
2016-09-12 20:53:11 375
原创 凸包的面积交,面积并。
题目:NBUT 1640:多边形的公共部分。题意是求:两个简单多边形是否有相交。思路:计算出两个凸包的面积交或者面积并,都可以解决这个问题。由于题目说了是简单多边形,而且是逆时针的顺序输出的,所有不需要求凸包了。求面积交的代码:#include#include#include#include#include#include#include#include
2016-09-02 20:09:54 1492
原创 codeforces 707D Persistent Bookcase
题意:一个n*m的矩阵执行四种操作:1,i,j位置置1;2,i,j位置置1;3,第i行,0变1,1变0;4,返回第i次操作的状态。思路:我还真以为是可持久化呢!我就说CF咋出这么难的数据结构,没想到就一个简单的dfs。代码:#include#include#include#include#include#include#include#include#i
2016-08-21 10:18:32 599
原创 HDU 5860 Death Sequence
题意:一个线段上的约瑟夫问题。做法:简单暴力,思路清晰的线段树,或者DP线段树做法:#include#include#include#include#include#include#include#include#include#include#include//#includeusing namespace std;#pragma comment(linke
2016-08-20 19:51:12 513
原创 HDU 5861
题意: 在一条线上有n个站,相邻站只有有条路,打开每天需要花费w[i],但是每条路只能开,关一次。有m天的行程,从ai到bi,问每一天的花费。思路,找出每条路的最大和最小经过的日期,加到对应的答案区间。代码:#include#include#include#include#include#include#include#include#include#include
2016-08-20 15:42:06 340
原创 HDU 5862 Counting Intersections
题意: 问与坐标轴平行的这些线段有多少个交点。思路: 线扫描的思想,这种做法也是很好想的。由于坐标的范围较大,可将其中一个坐标离散化(我是离散化X坐标)。由于题目中有声明:The input data guarantee that no two segments share the same endpoint, no covered segments, and no segments
2016-08-20 11:15:26 467
原创 HDU5858 Hard problem
题意:求阴影部分面积。思路:就是小圆的面积减去大圆与小圆面积交的二倍。#include#include#include#include#include#include#include#include#include#include#include//#includeusing namespace std;#pragma comment(linker, "/STAC
2016-08-20 09:50:28 472
原创 SPOJ DQUERY
题意: 求区间内不同元素的个数。做法:主席树,莫队等等。主席树:又叫可持续化线段树。说白了就是每一个前缀和都建一颗线段树。表示出以该点结尾的区间的区间不同数的个数。 虽然说建立n棵线段树,其实每颗线段树只有longn个点,来维护整个树的信息。因为每两个相邻的线段树只有一个值不同,那么我们就刚好就是这long n个点。不会主席树的可以看看代码。试着将这那个线段树画出来,看看他们每个点的
2016-08-18 09:23:08 423
原创 HDU 5834 Magic boy Bi Luo with his excited tree
题意:问从每个节点出发,能获得的最大价值。做法:树形DP。思路:用两个DFS。第一个DFS维护出,每个节点,从它的所有子节点返回该点能得到的最大价值(subtree_max_back),它的一个子节点不返回该点可以得到的最大价值(subtree_max_nback)和次大值(subtree_submax_nback),以及不返回的最大价值是当那个点不返回时得到的(subtree_max
2016-08-15 17:05:55 574
原创 HDU 5833 Zhu and 772002
题意:300个质因子小于2000的数中,选取若干个数出来,使他们的乘积为完全平方数。思路: 如果一个数是完全平方数,那么它的每个质因子的个数都为偶数。那么我们就可以列出一系列的方程。a11x1+a12x2+...+a1nxn=0a21x1+a22x2+...+a2nxn=0...an1x1+an2x2+...+annxn=0aij:第i个质数(2000内有303个质
2016-08-15 11:42:15 372
原创 HDU 5839 Special Tetrahedron
题意: n个点中,选出4个点出来构成一个四面体,要求四面体至少有四条棱要相等。并且不想等的两条棱不能相邻。思路:1. 据说N^4直接暴力加一点点的优化就可以过了。 2.我们可以枚举每条棱,假设它与其他棱不想等,那么我们再去枚举点,找到一群与该线段的两个端点的距离相等的点,那么我们再去找这群点中找出 与改线段的端点的距离相等的点对,现在这四个点组成的四面体就满足了第一个条
2016-08-15 10:09:11 422
原创 HDU 5828 Rikka with Sequence
题意: 对一个长度为10W 的数组进行如下三种操作:1,区间[l,r]的数都加上x;2,区间内的没个数都开根号(向下取整);3,求区间[l,r]每个元素的和。官方题解:但是官方标程也被卡T了。据说hack数据是:10万个2,3,2,3,2,3.......,10万个操作 加6,开根。但是题的确不错。在本题中我并没有按照官方题解的方法。我们可以想下,发现区间的最大值,最小
2016-08-13 21:30:38 389
原创 HDU 5829 Rikka with Subset
题意: 给一个数组A[n], 要求出所有的T[k],T[i]指A数组的所有子集中前k大的和的和。虽然只是用FFT的原理,NTT的模板。将代码中的A和B卷积,然后再乘上,各自对应的系数1/(2……k*(k-1)!);需要需用:费马小定理,费马素数 FFT等等。代码:#include#include#include#include#include#includ
2016-08-13 19:06:40 1012
原创 LA3907 Puzzle
题意:给s个禁止子串,求不含他们的最长串。思路:用这s个禁止串建一个 AC自动机,那么这些串的尾节点表示禁止节点。然后DFS判断是否存在环(为环就无限长了),在DFS的时候顺便记录下跑的路径,在输出字符串的时候就方便了。代码:#include#include#include#include#include#include#include#include#include#i
2016-08-04 09:58:56 305
原创 LA 2755 Hidden Password
题意:一个长度为n的串,它可以按位循环左移,问变成最小字典序的字符串需要左移多少次。据说后缀数组要TLE。正解是“字符串最小表示” PPT在:http://download.csdn.net/detail/moon_no2015/9006921可以免费下载。代码很简单,至于为什么,看PPT吧。#include #include #include using namespace s
2016-08-03 19:58:08 389
原创 LA 11107 Life Forms
题意:在一个最大的字符串,使得它在超过一半的DNA序列中出现。思路:首先用不同字符间隔将所有输入的串拼起来,,求出这个新串的后缀数组和height数组,然后二分长度P,每次只需要判断出是否有一个长度大于P的串在超过一半的串中连续出现。判断方法是扫一次height数组,将其分成若干段。每当height[i]小于p时开辟一个新段,则每一段的最初p个字符均相同,只要某段中包含了超过n/2个原串的后缀
2016-08-01 17:10:15 400
原创 UVA 11019 Matrix Matcher
题意:找在矩阵T中P矩阵出现的次数做法:AC 自动机,或者hash。hash版:http://blog.csdn.net/moon_no2015/article/details/47760299AC自动机版:#include#include#include#include#include#include#include#includeusing namespace
2016-08-01 11:00:14 343
原创 UVA 11468 Substring
题意:给出一些字符和各自对应的选择概率,随机选择L次后将得到一个长度为L的随机字符串S.给出K个模版串,计算S不包含任何一个串的概率思路:d[i][j]表示当前在结点i,还要走j步,不碰到任何禁止结点的概率.,在计算last的语句后面加一个val[u]|=val[f[u]],来计算禁止结点代码:大白书P216#include#include#include#include#in
2016-07-31 20:51:36 338
原创 LA 4670 Dominating Patterns
题意:找出在文本串中出现次数最多的字符串。方法:AC自动机。基本上算模板。(按照大白书的写法)#include#include#include#include#include#include#include#includeusing namespace std;#define ll long longconst ll mod = 20071027;#define nn
2016-07-31 15:33:23 282
原创 UVA 11732 "strcmp()" Anyone?
题意: 输入n个字符串,两两调用一次strcmp(),问字符比较的总次数。分析:两个相同字符 比较2次 两个不同字符 比较1次 ‘\0’和'\0‘ 比较两次 '\0'和其它字符 比较一次思路: 建一颗字典树,然后每insert一个字符串,就
2016-07-31 11:05:01 379
原创 HDU5754 2016年第三场多校C
题意不说了,伤心,不知道这群人怎么找出来的规律#include#include#include#include#include#include#include#include#include#includeusing namespace std;int n,m;int main(){ int t,op; scanf("%d",&t); whi
2016-07-26 20:20:51 297
原创 HDU 5726 GCD 2016年多校D题
题意:给你一个长度为n 的数组,q次询问,每次询问给一个区间 l,r 问原数组有多少个连续的区间的GCD与该区间的GCD 相等。思路:用MAP记录所有区间的各种GCD值得数量。代码如下:(不要全部用LL,要T呀)#include#include#include#include#include#include#include#include#include#includ
2016-07-25 17:18:27 557
原创 hdu5725 Game 2016年多校C
题意:给你一个n*m的棋盘,棋盘上有一些守卫,守卫之间不能相互攻击(守卫的攻击范围为同行,同列与 相邻的其他8个方格)。求从棋盘上任取两方格(可以为同一个)问最短距离的期望。思路: 我们可以先求出 忽略守卫占位的影响总的最短距离,然后再加上守卫占位使得最短距离+2的条数*2(考虑方向性,不同方格队的数量*4).根据上图我们可以看出对于每一行的右边部分(1区域)的点到2区域的点的
2016-07-25 11:02:35 835
原创 HDU5667 Sequence
就是个矩阵二分幂吧#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define MAXN 4#define ll long longconst ll INF=0x3f7f7f7f;ll mod;
2016-04-17 14:48:35 418
原创 hdu5653 Bomber Man wants to bomb an Array.
问题描述:给一个长度为 N 的一维格子和一些炸弹的位置,请你计算 “最大总破坏指数”。每个炸弹都有向左和向右的破坏力,如果一个炸弹向左和向右的破坏力分别为 L和R,那么该炸弹将炸毁 L+R+1个格子(左边L个,炸弹所在格子,右边R个)。破坏指数的计算方式为:所有炸弹炸毁的格子数的乘积。假设第i个炸弹炸毁了Xi个格子,那么总破坏指数就是 X1∗X2∗....Xm。
2016-03-27 19:23:54 431
原创 hdu5652 India and China Origins
官方题解:这是一个连通性的问题。你会发现如果将所有操作逆序来看的话就很容易用并查集来处理了。 首先把所有的山峰都加到图中,然后逆序处理每个操作: 对某次操作,在图中删除该位置的山峰,然后判断两个点是否联通,一旦联通就得到了结果。 这里需要对China和India分别新建一个对应的节点。当然加点操作也是可行的。#include#include#include#include#incl
2016-03-27 18:45:55 760
原创 大视野1047 [HAOI2007]理想的正方形
一道简单的二维RMQ,#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#pragma comment(linker, "/STACK:1024000000,1024000000")#define nn
2016-01-31 11:37:10 364
原创 codeforces587C Duff in the Army
LCA 问题,需要用到倍增(包括点上的信息),不然会T。#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#pragma comment(linker, "/STACK:1024000000,1024000
2016-01-29 16:26:55 569
原创 POJ2763 Housewife Wind
树链剖分有两种操作,1.修改边的权值2.询问路径权值和#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#pragma comment(linker, "/STACK:102400000
2016-01-28 17:01:58 308
原创 HDU3078 Network
LCA问题,先输入n,和q;表示节点的个数和操作的个数然后一行n个数,表示这n个节点的权值然后n-1行,每行两个数,表示节点u与节点v相连最后q行,表示操作 每行三个数,k,u,v;当k=0时,将u点的权值改为v当k>0时,输出从u->v路上第K大的权值首先求出节点u和节点v的最近公共祖先lc,然后将节点u到lc的点的权值记录到p数组中,再将v到lc的权
2016-01-28 11:29:06 403
原创 POJ 1330 Nearest Common Ancestors
LCA 的 入门级题目。现在给你一棵树,求u和v的最近公共祖先是那个节点。方法有很多种,可以用RMQ,tarjan或者是回溯打标记。#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#pragma
2016-01-27 16:23:53 266
原创 HDU1075 What Are You Talking About
水题一道,可以用字典树也可以用map做。都很简单;字典树版#include#include#include#include#include#includeusing namespace std;#define nn 1001000char s[nn];struct Trie{ int ch[nn][26]; int val[nn]; cha
2016-01-26 10:08:28 317
原创 HDU1251 统计难题
简单的字典树,当然也可以用其他方法。#include#include#include#include#include#includeusing namespace std;#define nn 1001000#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1struct Trie{ int ch[nn][2
2016-01-24 21:14:18 343
原创 HDU 2072 单词数
字典树。这题真的有点坑。1,输出为0的情况。2,第一个单词前面有空格3,单词间的空格不止一个4,最后的单词后面的空格#include#include#include#include#include#includeusing namespace std;#define nn 1001000char s[nn];struct Trie{ int
2016-01-24 21:12:30 283
原创 POJ2482 Stars in Your Window(线段树)
题意:在一个平面内有N个星星,每个星星都在一个亮度值,用一个W*H的矩形去围这些星星,(边上的不算)求能得到的最大亮度值。思路:我们很容易想到,可以动态的维护出每个宽度为W 的区间内,找出满足的星星,然后在高度为H的范围内求和。但是这样明显时间复杂度太高,维护宽度为W的区间只需要o(n),在高度为H的范围内求和时间复杂度为o(n*H),总的就是o(n^2*H).显然“维护宽度为W的
2016-01-23 15:13:55 467
原创 [Zjoi2013]K大数查询
两个线段树,来维护C在任意区间上出现的次数。外层按质(C)建树,内层按下标建树(只建需要用到的节点)。#include#include#include#include#include#include#includeusing namespace std;#define LL long long#define ull unsigned long long#define nn
2016-01-20 11:00:03 750
原创 大二周赛之今天有点不开心(-。-;)
第一题:来源于POJ3690题意:给出一个n * m的矩阵,矩阵中只有一些*或者0,n 解法:hash.把每一行连续的p个数hash成一个long long 的二进制数,就可减少判断的次数,当然也可以将每个P* Q的矩阵给hash一个数(要用unsigned,可以自动取模)。代码:#include#include#include#include#include#inclu
2015-12-12 16:13:49 540
原创 SWUST大二周赛 之农夫山泉有点甜
第一题: codeforces 485b题意:给定一些点,要用尽量小的正方形框住所有的点,输出矩形的大小。解题思路:维护x的最大值和最小值。同理y。然后取差值中的最大值作为变成,注意用long long代码:#include#include#include#include#includeusing namespace std;#define ll long lo
2015-11-21 14:15:49 2586
原创 HDU2108 Shape of HDU
题意简单就是,凸包的判定;我们可以用向量叉积的正负来判定;我们去除连续的三个点a,b,c,如果(a-b)叉乘(a-c),如果,大于零,则b点的角度小于180度,这样判断出所有的角度,就可以确定该多边形是不是个凸包。代码如下#include#include#include#includeusing namespace std;#define ll long longcha
2015-09-01 16:46:02 565
2015-2016 ACM-ICPC Northeastern European Regional Contest 标程
2016-08-23
网络流与线性规划24题
2015-08-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人