- 博客(170)
- 资源 (7)
- 收藏
- 关注
原创 巧妙地利用STL map set pair 贪心+排序 Codeforces Round #331 (Div. 2)C. Wilbur and Points
http://codeforces.com/contest/596/problem/C题意给你一堆点,要求你找到一个集合,使得他的y[i]-x[i]=w[i]且如果xj>=xi && yj>=yi,那么id[i]>id[j]问你能否找到题解:我们贪心取最小就好了,然后再check一下就好了check可以使用线段树,也可以先按照Y排序,然后
2015-11-16 16:54:05
895
原创 罪犯审问 暴力+记忆化 SRM 672 div2 1000Tdetectived2
题意抓小偷,先从目击者0开始,选择犯罪可能性最大的一个人,如果有多人相同,选择哪个都有可能。然后更新所有人的犯罪可能性。问如果一个人是小偷,最少几轮能被发现。题解暴力枚举,状态压缩DP两重循环计算每个人的在所有人中的最大怀疑值,若等于指定人则更新答案。int n;vector s; int memo[18][1<<18]; int f(int k,
2015-11-07 17:04:29
1050
原创 除以路径中所有数 时间戳+LCA+路径压缩 2D
http://codeforces.com/problemset/problem/593/D题意一个含有n个点的树,边上都有一个正整数权值,进行两种操作:1、1 u v w,用w依次除以u到v简单路径上所有边的权值,输出结果2、2 p c,将第p条边的权值变为c,边权值只会变小,不会变大思路注意到一个不大于1e18的数进行除运算,最多会除以O(log)次大于1的数。随意
2015-11-07 16:56:51
712
原创 最快遍历完图中重要节点 树的直径 Codeforces 328 (Div. 2) D. Super M
http://codeforces.com/problemset/problem/592/D题意给你一棵树,树上有一些重要的点,超人必须要去。然后让你选择一个点作为起点,使得从这个点开始遍历其他的重要的点要走的距离最小如果有多个解,就输出最小的那个题解:相当于建一颗包含所有重要的点,但是大小最小的虚树,然后再那个虚树里面找到字典序最小的直径然后答案就是2*边长-
2015-11-04 13:40:26
1013
原创 求i<j<p<q w[i]×w[p]=w[j]×w[q]总数 STL map SRM 671 div1 500: BearDarts
https://community.topcoder.com/stat?c=problem_statement&pm=13951接题意:给定一个含有N(N iw[i]×w[p]=w[j]×w[q]题解为了方便我们令a=w[i] b=w[j] c=w[p] d=w[q]我们先来枚举a和b那么问题就变成了有多少对(c,d)满足条件
2015-11-03 22:10:45
1176
原创 表情匹配总数 DP SRM 671 div1 300 BearCries
题意:给定一个长度为N(N的字符串 字符串中只含有”;”和”_“两种字符 一个合法的Cry表情为两个”;”中间含有至少一个”_“一个合法Cry表情为字符串的一个子串(不必在原串中连续)求题目中给出的字符串分解成若干个合法Cry表情的方案数(原字符串中的每个字符都必须出现在某个Cry表情中并且只能出现一次)题解:问题可以由dp解决问题可以由dp解决我们考虑状态f[
2015-11-03 19:46:57
664
原创 熟练使用map div2 B. Misha and Changing Handles
http://codeforces.com/problemset/problem/501/BSample test(s)input5Misha ILoveCodeforcesVasya PetrovPetrov VasyaPetrov123ILoveCodeforces MikeMirzayanovPetya Ivanovoutput
2015-10-23 20:19:10
513
原创 暴力字符串 Codeforces Div. 2 A Mr. Kitayuta's Gift
替换一个字符后是否能成为回文串#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;string s,sss
2015-10-23 17:32:05
797
原创 数学题 暴力字符串 Codeforces div2 E. Pretty Song
Codeforces Round #289 (Div. 2, ACM ICPC Rules)求一个字符串的所有字串的权值和,每个字串的权值为元音字母的个数比上字串的长度将字串转化为01串,那么区间[l,r]的字串的权值为(s[r]-s[l-1])/(r-l+1),枚举长度k,则所有字串的权值和为Sigma(1/k *(s[k]-[s0] + s[k+1]-s[1]+...s
2015-10-23 16:33:17
753
原创 单词在有且仅有一个字符不相同的情况下是否可以在字典里找到 hash codeforces div2 c Watto and Mechanism
题意:给出一个包含n个单词的字典,给出m个待查询单词,如果单词在有且仅有一个字符不相同的情况下可以在字典里找到,则输出YES,否则输出NO限制:0 思路 哈希#include #include #include #include #include #include #include #include #include #include #include #
2015-10-23 11:01:28
654
原创 判断s各个前缀是否是 ABABA…ABA的形式 KMP Codeforces 526D - Om Nom and Necklace
ZeptoLab Code Rush 2015D. Om Nom and Necklace 【题意】给出一个字符串s,判断其各个前缀是否是 ABABA…ABA的形式(A和B都可以为空,且A有Q+1个,B有Q个,Q给定)。 【官方题解】对于前缀P,我们可以把它拆成P=SSSS…SSSST,其中T是S的前缀。显然可以用KMP算法,时间复杂度是O(
2015-10-22 20:43:13
1241
原创 单点更新 平面增减点后找出平面上坐标大于(x,y)的点,有多点则找x小y小
题意:有三种操作“add x y”往平面上添加(x,y)这个点,"remove x y",将平面上已经存在的点(x,y)删除,“find x y”找出平面上坐标严格大于(x,y)的点,如果有多个点找x最小的,再找y最小的。第一次写这种类似的线段树,好处是省内存。这里可以先读入所有坐标后去重,然后对于每一个x坐标,维护一个set记录该x坐标下的所有y坐标,便于添加点或者删除点后查找最大的y坐
2015-10-13 17:34:42
745
原创 再来单点更新我就呵呵了
http://codeforces.com/problemset/problem/85/D题意:有三种类型的操作,1."add x"表示往集合里添加数x。2.“del x”表示将集合中数x删除。3.“sum”求出从小到大排列的集合中下标模5为3的数的和。集合中的数都是唯一的。线段树。在线段树中维护当前这个集合中数的个数cnt,和所有的数模5为0……4内的数的和设为mod[0..
2015-10-12 15:11:26
559
原创 猫抓老鼠 floyd SRM 670 Div2 Problem 1050 - Treestrat
题意在一棵树上,一些猫在一些结点上,一些老鼠在一些结点上。 每轮老鼠方先走,每只老鼠可以选择原地不动或者走到相邻结点。 如果老鼠走到有猫上的结点游戏结束。 问最多进行几轮游戏思路这么考虑。 每只老鼠的使命是尽可能地活得久。所以我们可以枚举他的终点,也就是树上的全部结点。 因为全部的猫都有可能来围剿这只老鼠,所以我们要看看有没有猫能在他之前到达这个结点,如
2015-10-12 13:09:03
771
原创 扫描线 n块菜地最大利润种菜(重叠区域种最贵) hdu3255 Farming
题目链接 hdu3255 Farming题目大意:有n块蔬菜地,每块蔬菜地中种一种作物,每种作物都有一个价格,当在同一区域内种植了两种不同的作物时,作物价格大的生存下来,作物价格小的死亡。问你最后能得到的最大利润是多少。解题思路: 每块蔬菜地种植蔬菜收获的利润为 val=x*y*price。 面积乘以价格,题目的重点转换在于如何确定重叠区域怎么让它种植最贵的蔬菜。观察
2015-10-11 22:55:50
635
原创 扫描线 n个立方体相交区域大于等于三次的体积和 hdu3642 Get The Treasury
题目链接 hdu3642 Get The Treasury题目大意:题意:给你N个长方体的和坐标,问你空间中有多少体积是被大于两个不同的立方体覆盖的。解题思路: 其实吧,三维的和二维的其实差不多。如果一个立方体的高为h,那么我们可以把它分割成h层,对每一层进行面积并的扫描,注意是从下往上。这题离散化x坐标是为了方便建树,离散化z坐标是为了节约时间。 剩下的问题就变成了
2015-10-11 22:52:03
728
原创 扫描线 矩形内围起的星星亮度总和最大大 poj2482 Stars in Your Window
题目链接 poj2482 Stars in Your Window题目大意:给你一些星星的坐标以及这些星星的亮度(x y c),然后给你一个矩形的框框,长宽分别为W、H,让你用这个框框去围住一个矩形的区域,要求区域内的星星亮度总和最大,并且矩形边框的星星不计入气内。解题思路: 对于每颗星星我们都对它进行一次构造,构造一个(W-1)*(H-1)的矩形(为什么不用W*H,因为边框
2015-10-11 22:48:09
760
原创 扫描线 求挖空矩形合并面积 hdu3265 Posters
题目链接 hdu3265 Posters题目大意:给你n张矩形海报,每张矩形海报在中间剪去一块矩形区域后贴在窗户上,问你贴完所有的海报之后窗户被海报覆盖的区域有多大。 解题思路:其实这题和第一题差不多。对于每张剪出矩形东东的海报,我们可以这样处理:挨着中间空矩形的两条横边或者两条竖边画两条线,那么每张海报不就变成四个实心矩形了么,接下来的解法和第一题一样。这里要注意的是
2015-10-11 22:45:47
935
原创 扫描线 求多个矩形合并后的周长 hdu1828 Picture
题目链接 hdu1828 Picture 题目大意:给你多个矩形,求他们合并后的周长,被覆盖的边不能算进周长之内。解题思路: 其实周长并和面积并没什么很大的区别,只不过周长并增加了判断左右端点是否被覆盖的标记 lbd 和rbd 数组, 以及numseg 数组 记录连续区间段数。numseg : 一根扫描线扫描过去,会记录有多少个连续的区间段,每个连续的区间段都有两条相等
2015-10-11 22:44:15
1074
原创 扫描线 求n个矩形覆盖后的总面积之和 hdu1542 Atlantis
题目链接 hdu1542 Atlantis (入门题)题目大意:给你n个矩形,求他们的总面积之和(覆盖区域只算一次)。解题思路: 详解请移步到here。#include #include #include #include using namespace std; #define lz 2*u,l,mid #define rz 2*u+1,m
2015-10-11 22:42:29
2014
原创 区间合并 连续性问题 查询与第x个村相连的村子有多少个
题目链接 hdu1540 Tunnel Warfare题目大意:有N个村子排成一条直线,每个村子都连接了它的左右两个村子(除了最左边和最右边的外),有3种操作,(1)"D x",表示将第x个村子摧毁。(2)"Q x",表示查询与第x个村子直接和间接相连的村子有多少个。(3)"R",表示将最早摧毁的村子复原。解题思路:O(-1)#include #include #in
2015-10-11 18:04:10
746
原创 区间合并 内纯释放问题 hdu2871 Memory control
题目链接 hdu2871 Memory control题目大意: 给n个单元内存,有 四个操作: 1、New x 找一段长为x的空区间段填满。 (下面用0表示空单元,1表示非空单元。) 2、Free x 释放包含x的区间段 3、 Get x 找到第x个区间段 4、将整个区间都置为空。解题思路:可以
2015-10-11 18:01:06
567
原创 区间合并 成段异或更新 求最长01段
题目链接 hdu3397 Sequence operation题目大意:有n个数,可能为0或为1。接下来是m个操作,操作有5种类型。(1)“0 a b”,表示将区间[a,b]范围内的数全部置0;(2)“1 a b”,表示将区间[a,b]内的数全部置1;(3)"2 a b",表示将区间[a,b]内的数0变成1,1变成0;(4)"3 a b",表示查询[a,b]范围内1的数;(5)
2015-10-11 16:07:00
565
原创 区间合并 区间更新 求第一个条件的子段首下标(住宿问题)
题目链接 poj3667 Hotel (此题代码有详细注释,作为初学者可以参考代码理解)题目大意:让你对一个区间进行操作。输入Q C 或者 Q C D。 Q ==1 输入 C: 表示让你求1-n中是否有连续的C个空hotel,如果有多个连续的C个空hotel,则取最左边的,并输出最左边的第一间hotel标号。让人住进去,那么这些空房就不能住人了。如果不存在连续的C个
2015-10-11 16:04:22
525
原创 区间合并 单点更新求最长上升子序列
题目链接hdu3308 LCIS题目大意:给你n个整数,有两种操作,(1)"U A B",表示把第A个数变成B,"Q A B",表示查询区间[A,B]的最长连续上升序列。解题思路:O(-1)#include #include #include #include using namespace std;#define lz 2*u,l,mid#define rz
2015-10-11 15:57:46
863
原创 成段异或更新 poj3255 Help with Intervals
题目链接 poj3255 Help with Intervals题目大意:集合的基本操作,具体地说就是并、交、相对补和对称差。五种操作 ‘U’、‘I’、‘D’、‘C’和‘S’中的一个 加上一个区间(T),形式为(a,b)、(a,b]、[a,b)和[a,b]。解题思路: U:把区间[l,r]覆盖成1; I:把区间把[-∞,l)(r,∞]覆盖成0; D:把
2015-10-11 15:55:40
508
原创 成段覆盖更新+离散化 求建筑的平面覆盖面积 poj3277 City Horizon
题目链接 poj3277 City Horizon题目大意: 平面上有[1,40000]个建筑,每个建筑有一个区间[Ai,Bi]表示它的跨度,Hi表示其高度。要求这n个建筑的平面覆盖面积。解题思路:和上一题差不多,只是多了一个求面积操作,数据范围过大,同理也要用到离散化。#include #include #include #include using names
2015-10-11 15:53:47
879
原创 成段加值更新 区间求和 poj3468 A Simple Problem with Integers
题目链接 poj3468 A Simple Problem with Integers题目大意:给你n个附有起始值的数,然后m次询问。C a b val :表示区间[a,b]的数都加上一个val值,Q a b :询问区间[a,b]的综合。解题思路:O(-1)#include #include #include using namespace std;#defi
2015-10-11 15:50:28
565
原创 成段改A为B更新区间求和 hdu 1698 Just a Hook
题目链接 hdu 1698 Just a Hook 题目大意:给你n个数(初始时每个数的值为1),m个操作,每个操作把区间[l,r]里的数更新为c,问最后这n个数的和是多少。 解题思路:O(-1)#include #include using namespace std;const int maxn=100005;int tree[4*maxn];int
2015-10-11 15:46:17
526
原创 单点更新倒序插队问题
题目链接:poj2828 Buy Tickets题目大意:有n个人排队买票对应n个操作,每个操作有两个值 pos val ,代表第i个人会插到第pos个人后面,他手上票的值为val。n个操作完后让你输出n个人排成一队的总状态。解题思路:题目转了一个弯,不是让你直接求第几位的值是多少。但是其实道理是一样的,从后往前开始排,每个人在他自己前面留pos个空位置,有人的位置不算,因为我
2015-10-11 15:43:32
554
原创 单点更新查询区间最大值 hdu1754 I hate it
hdu1754 I hate it 题目大意:给你N个数,M个操作,操作分两类。(1)"Q A B“,查询区间[A,B]内的最大值。(2)"U A B",将第A个数的值改成B。 解题思路:O(-1)#include #include using namespace std;#define lz l , m , rt << 1#define rz m + 1
2015-10-11 15:39:52
548
原创 单点更新区间求和贴海报问题 hdu2795 billbord
hdu2795 billbord 题目大意:有一块板子,长宽分别为W,H,然后有n块1*w海报,让你把这n快海报贴在这块板子上,尽量板子的上方贴,同一行尽量往板子的左边贴。对于第i块海报如果能够贴下则输出能贴在第几行,否则输出-1。 解题思路: 设线段树的操作长度为H,则对应的叶子节点的最大值为W。设每次找到符合要求的位置(板子最上最左,对应线段树中最下最左)减去相
2015-10-11 15:36:38
704
原创 单点更新区间求和 hdu1166 地兵布阵
hdu1166 地兵布阵 题目大意: 有N个工兵营,每个工兵营开始有a个人,然后有一些操作。Add i j 第i个工兵营加j个人 Sub 第i个工兵营减j个人,Q i j 询问第i到第j个工兵营的总人数。 解题思路:O(-1)#include #include using namespace std;#define lz 2*u,
2015-10-11 15:33:43
445
原创 字符串k在第li到第ri个字符串中一共出现了几次 后缀数组+线段树 Codeforces Div. 1E. Mike and Friends
http://codeforces.com/problemset/problem/547/E题意:给出n个字符串和q个询问,每个询问给出一个区间[li,ri]和数字k,问字符串k在第li到第ri个字符串中一共出现了几次?题目分析:思路一这题用后缀数组来做,十分直观。我的方法是O(nlog2n),O(nlogn)的方法就是把线段树换成主席树来实现(不想
2015-10-08 16:02:41
800
原创 交换a串的位置让b.c串出现最多次 暴力 Codeforces Div. 2 B. ZgukistringZ
题意给你a,b,c三个串,让你随意交换a串的位置,让b串和c串在a串里面不重复的出现最多次题解:B题,就老老实实想暴力就好,直接暴力枚举b串出现的次数,然后再算出c串出现的最多次数,然后搞一搞就好了#include #include #include #include #include #include #include using namespace
2015-10-08 00:58:44
687
原创 找出s的子串中字典序第k小的“半回文串” Trie Codeforce Div. 2 Ann and Half-Palindrome
题意找出s的子串中字典序第k小的“半回文串”,给出半回文串定义是:对于任意i思路这用dp推下就可以了,dp[i][j]表从i到j是否是回文串 则dp[i][j] = dp[i+2][j-2](j-i>=4),其他的都是奇回文串; 要输出第k个字典序的子串,首先肯定想到要用字典树输出来就是了,很简单的dfs就可以了。插入串的时候,就不要一个一个插了,而直接插一个后缀就可以了这样总
2015-10-07 18:18:49
1227
原创 字符串q次操作将(l,r)内的字符升序或降序排列 计数排序 + 线段树优化 Codeforces div2 558E A Simple Task
题意:给定一个字符串,有q次操作,每次操作将(l,r)内的字符升序或降序排列,输出q次操作后的字符串。分析:基本思想是计数排序。所谓计数排序,是对一个元素分布较集中的数字集群进行排序的算法,时间复杂度为O(n),但使用条件很苛刻。首先对n个数扫一遍,映射出每个数字出现的次数,然后再O(n)扫一遍处理出:对于数字ai,有多少个数字在ai前面。有了这个信息,我们就可以在
2015-10-07 14:48:00
2708
原创 规律+DFS Codeforces Round div2 D. Equivalent Strings
http://codeforces.com/problemset/problem/559/B题意,给出两个字符串,确定,是否相等,定义字符串是否相等为,如果为奇数串,只能比较是否每个字符相同,如果为偶数串,第一个串分成两个相等长度的串为a1 b1,第二个串也分成a2 b2,a1== a2 && b1 == b2 || a1 == b2 && a2 == b2.思路:
2015-10-06 23:42:16
461
原创 查询[l,r]区间数字串是不是周期为d的串 线段树区间修改+双重hash Codeforces #321 E. Kefa and Watch
题意: 给定数字序列 2种操作 1. 将[l,r]区间数字变成c 2. 查询[l,r]区间数字串是不是周期为d的串 x is called a period of string s (1 ≤ x ≤ |s|), if si = si + x for all i from 1 to |s| - x
2015-10-06 22:03:43
882
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人