ACM
文章平均质量分 65
Lei2015_
这个作者很懒,什么都没留下…
展开
-
什么大牛不大牛,先A500题再说吧
DP 100计划正式启动。。。第一天就遇到斜率优化,小卡一题。 这个月DP100做完,下个月开始做图论100,然后是数据结构100,不过DP 图论里面本身就用到很多数据结构了。 寒假做字符串和数学题100。真是痛苦的过程啊。题题见血。。。原创 2013-11-24 16:33:19 · 983 阅读 · 0 评论 -
CF 366C。。。 鏖战了一晚上了 一道要换换角度的DP
这道题让我想起来一道已知各个砝码重量,问总共有多少种平衡状态的题目。 给出n个食物的味道和热量数值,做出一道菜,这道菜所用的食物的味道总和比上热量总和为K。求这种情况下味道值最大为几。 sumT为这道菜的味道之和 sumC为这道菜的热量之和。 sumT/sumC=K 等价于 sumT+sumC*K=0 这样的话我们的状态就是sumT+sumC*K。原创 2013-11-25 03:09:12 · 948 阅读 · 0 评论 -
UVA 147 水DP
wanquanbeibaowentizhuyi DOUBLE zhuan INT de shi hou si she wu ru.#include#includelong long dp[50000];int coin[11]={10000,5000,2000,1000,500,200,100,50,20,10,5};int main(){ dp[0]=原创 2013-11-25 14:24:47 · 582 阅读 · 0 评论 -
UVA562 Dvide Coins
又是一个判断是否存在某种状态的DP状态是左边减去右边的得数,01背包枚举出所有的状态,判断距离中点最近的点就好了。#include#include#includeusing namespace std;const int MAX=110000;int dp[2][MAX];int coin[200];int main(){ int *cur=dp[0]; int原创 2013-11-25 14:55:42 · 547 阅读 · 0 评论 -
UVA 348 DP 矩阵乘法 输出结果
递归输出结果。矩阵乘法每一格消耗O(n),结果行数等于左矩阵行数,列数等于右边列数。#include#include#include#include#includeusing namespace std;int dp[20][20];int res[20][20];int n;int row[20];int col[20];const int INF=0x3f3f原创 2013-11-25 17:01:25 · 709 阅读 · 0 评论 -
CodeForce Round 215 DIV2 C 使用了线段树 但是多此一举...
这道题的题意蛮复杂,但是抽象出来就是统计一下xyz的个数分别是多少,如果最大相差不超过1,那么就可以,否则不可以。阅读了一下其他人的代码,发现都是随便保存了一下前缀后缀什么的就过了。所以,这种明显可以用线段树,但是找不到需要更新的地方的题目就不要用线段树了,保存一下“前缀和”,就可以O(1)的回答,线段树还要O(longn)想起来长沙那道A题,别人过得那么快,自己过得那么慢就是因为弄复原创 2013-11-27 02:12:02 · 715 阅读 · 0 评论 -
lower_bound与upper_bound还有fill的使用
STL一直很好用,今天使用了一下lower_bound和upper_bound函数,熟练使用可以减少写二分的时间。lower_bound是二分查找出大于等于给出的数的第一个值。upper_bound是二分查找出大于给出的数的第一个值。这两个函数都是返回的地址,所以使用还要减去首地址(如果数组里面保存的是int)下面是使用lower_bound优化最长上升子序列。由于长度相同的上原创 2013-11-28 15:49:51 · 700 阅读 · 0 评论 -
(转)楼教主回忆录
利用假期空闲之时,将这几年GCJ,ACM,TopCoder 参加的一些重要比赛作个回顾。昨天是GCJ2006 的回忆,今天时间上更早一些吧,我现在还清晰记得3 年前,我刚刚参加ACM 时参加北京赛区2005 和杭州赛区2005 的情况。2005 年ACM-ICPC——酸甜苦辣我进入清华大学开始本科学习的时间是2004 年8 月,在进入清华大学的第一年里,由于基础课学原创 2013-11-30 23:32:06 · 2545 阅读 · 0 评论 -
线段树模板
不管是建树查询还是更新,都分为不相交,相交,包含三种情况。分别处理。建树和更新的时候要PushUp.维护线段树懒标记就是的时候更新之,查询和更新之前PushDown。查询的时候只和线段树有关和懒标记无关。至于标记和线段树代表什么,怎么更新,就是因问题而异了。POJ 3468#include#include#includeusing namespace std;ty原创 2013-11-30 15:54:37 · 609 阅读 · 0 评论 -
CF Round216
#include#include#include#includeusing namespace std;const int MAX=200000;struct edge{ int to; int type; edge(int a,int b) { to=a; type=b; } edge() {}};vector res;vector G[MAX];in原创 2013-11-30 01:17:37 · 641 阅读 · 0 评论 -
UVA 10354 nlogn LIS
nlogn的最长上升子序列(原理)。这是第一个trick。第二个,要左边和右边的相同,枚举每一个点作为最高点时的情况。两边取较小的那个再乘以2。#include#include#includeusing namespace std;#define MS(x) memset(x,0,sizeof(x))int up[20000];int down[20000];in原创 2013-12-07 13:50:44 · 665 阅读 · 0 评论 -
UVA 10905 Children's Game
这题还是比较有意思的,给你一堆数字,你要把这堆数字一个一个的串联起来组成一个大数字,要求这个数字最大。本来以为只是比较一下字符串。把字典序从大到小接连起来。后来想想不对。两个字符串长短不同的时候会有错误。比如 90和9 90的字典序要大于9,但是9放在前面比较好。所以,当短的数字在长的数字里面出现循环的时候非常棘手。可以递归的把长数字里面的短数字给去掉,然后比较剩下的部分就好了。原创 2013-12-08 17:45:51 · 547 阅读 · 0 评论 -
CodeForces Round 218 D. Vessels(学姐我没用线段树系列)
这道题的意思是给你一个水塔,可以从中间任意一层倒水,告诉你每一层的容量,这一曾层满后水会流入下一层,总共有N层,再满了就直接流到地上。然后给出N个操作操作1:往第n层中加x的水操作2:询问每一层装有多少水用BIT保存所剩空间的前缀和,每次加水的时候二分最终水会流到哪一层,然后加水的时候依次更新BIT,虽然式单点更新但是每一次更新都会直接把该层的空间沾满,下一次不会再更新,所以总共是O(原创 2013-12-08 22:59:15 · 1041 阅读 · 0 评论 -
UVA 437. 叠罗汉
一堆正方体格子,每种格子有无限个,最高能叠多高。每一层的下面那个都必须严格大于上面那个(长和宽)dp[i][j][k] 若有n个格子的话最多转移3*n次,懒得搞了...每一个都转移99次,反正n对多为30,。dp[i][j][k]表示这是第i次转移,最上面那个是j,j的k面朝上。#include#include#includeusing namespace std;int c原创 2013-12-02 16:53:23 · 649 阅读 · 0 评论 -
UVA 10057 中位数
题目给出N个数,求出其中一个数A,所有数与这个数的差的绝对值最小。这个数必须是中位数。假设N是奇数,对于中位数MID,左边有N/2个数,右边有N/2个数。假设此时和为SUM。如果A不选择MID,而是选择MID左边一个数的话,则左边的数到A的距离均减一,右边的数加上中位数到MID距离加一。SUM‘=SUM+1,SUM增大,同理右边。所以必须是中位数。对于带权中位数。对于每一个原创 2013-12-08 16:40:50 · 592 阅读 · 0 评论 -
CF Round 219 好手生....
第一题没什么说的第二题是定义一个函数S(n),S(n)=n这个数字的位数给出一个系数k,和一个起始值m,构造一个序列(m,m+1,m+2....),每次往上加数的时候会消耗k*S(n)的值,在这个值不超过w的情况下最多挂几个数字?二分做的,二分这个n,判断的时候分成三部分数,从开始值m到第一个10的幂,第一个10的幂到第m`个10的幂,最后一个10的幂到m+n。最简单的方法应该是直原创 2013-12-14 03:07:59 · 536 阅读 · 0 评论 -
CodeForces Round 218 E Subway Innovation
题目大意:直线上N个点,去掉一些只剩下K个,使得剩下的K个点两两之间距离之和最小显然,这K个点应该是坐标轴上连续的K个点但是因为N很大,所以只能是O(n)的做第一O(n)的求出 0 到 k 的和第二O(n)的求出 剩下的长度为k的区间的答案先求第一个f(0,i) = f(0,i-1)+∑dist[i]-dist[k] (k = f(0,i-1)+(原创 2013-12-17 00:09:38 · 722 阅读 · 0 评论 -
CodeForces Round 220
第二题怎么交怎么错,到最后竟然是题目错了,哎,齐葩。A。Inna and Pink Pony第一题最后过了ST的只有不到200个...我的那份代码挂了= =挂在如果一步都不能动,那么是不可以到的这题意思是给你个棋盘,里面(i,j)处放了个糖,你可以把这个糖这样移动move the candy from position (x, y) on the board to原创 2013-12-19 02:37:21 · 648 阅读 · 0 评论 -
CodeForces Round 223 Div 2 C Sereja and Prefixes
乱搞题..题目链接 http://codeforces.com/problemset/problem/380/A一个人要做个数字序列,有两种操作,1 是 向后面加个数字 2 是向后面加上从 1 到 l 的复制 C 次的序列最后有 m 个询问记录下每个操作所诞生的序列的开始位置记录下每个操作的信息,放在 node 里面遇到 类型 1 的节点 直接返回值遇到 类型 2 的节原创 2014-01-13 02:05:26 · 649 阅读 · 0 评论 -
CodeForces Round 213 Div 2 E Sereja and Brackets 线段树
我本来觉得这个题不能用线段树的,因为联想到从前做的有关括号的匹配的问题好像都是DP的,如果直接线段树的话就有点贪心的意思。但是仔细想想,这题只是匹配,用线段树非常合适,因为括号分成两部分,左边和右边,线段树也都是二分的,所以统计每一层节点的 左括号, 完整括号 和右括号,上一层的节点的 完整括号就等于 用左儿子的左括号匹配右儿子的右括号 再加上完整的括号就可以了。非常易用的可加性。还是个没有更新的原创 2014-01-13 15:22:22 · 884 阅读 · 0 评论 -
CodeForce Round 219 Div2 E Watching Fireworks is Fun 单调队列DP
非常直观的单调队列优化的 DP这种每次更新都需要一大串从前的数据的DP就应该是需要线段树或者单调队列优化的 DP 了。题意:有一个街道放烟花,街道分成 N 块(1 dp[i][j] 为第 i 次放烟花的时候 happy 值, dp[i][j] = max (能到的地方的 dp[i-1][j] ) + 在 j 处的 Happy 值 。max (能到的地方的 dp[i][j] ) 这原创 2014-01-12 21:55:29 · 644 阅读 · 0 评论 -
POJ 3295 后缀表达式
给你一个表达式 类似这种形式 ApNq 大写字母代表操作(&& || 之类的),小写字母代表 bool 变量,若表达式无论变量值为何均为真,则输出 tautology ,否则输出 not.下面是操作符的真值表,想起来前一段时间看到的抽象语法树, 我就根据表达式构造一颗树, 然后分别给变量赋值就 OK 拉。Definitions of K, A, N, C, and E原创 2014-01-21 00:05:57 · 817 阅读 · 0 评论 -
POJ 2253 (坚持不看题解= =) 最短路
这道题被分类到最短路之下了,但是初次看题的时候想到的是最小生成树(最小瓶颈树)后来写着写着发现有点飘,不像是能A题的代码,就放弃了,后来又换了一种直接DFS回溯的办法。。但是写着写着就觉得,这尼玛写出来不就是最短路嘛。。然后floyd三个for循环解决了。初始化的时候像最短路一样初始化因为这是个 dp,最好想清楚dp的内容代表什么d[i][j] 代表 i 到 j 的路径上最小的原创 2014-01-21 12:17:43 · 669 阅读 · 0 评论 -
379C - New Year Ratings Change 贪心
题目链接 http://codeforces.com/problemset/problem/380/B给出所有人的期望分数,让所有人分数之和最小,且每人分不同这个,给数字排个序,然后从小开始,看看他和之前那个数的关系,要是小于等于的话,就让这个数字大一点#include#include#include#include#include#includeusing namesp原创 2014-01-13 17:15:37 · 1183 阅读 · 0 评论 -
POJ 1789 最小生成树(裸..当模板用把)
基本就是裸的算法当模板用把。。#include#include#include#include#includeusing namespace std;#define MAX 2014#define P pair#define fst first#define sec second#define MS(x) memset(x,0,sizeof(x))char car[M原创 2014-01-21 23:39:46 · 560 阅读 · 0 评论 -
POJ 1094 拓扑排序
这道题的确考查拓扑排序考查的挺全的第一:是否可拓扑第二:是否有唯一拓扑序第三:输出拓扑序是否可排序:当删点的时候度为0的点不是全部的点的时候,就一定出现了环是否唯一:利用 dfs 判断一个图是否可以排序可以用删点的方法,当出现两个及以上 0 的入度的点的时候,便是不唯一输出的话就排下序列然后输出就OK了..只是我不是这么做的...我之前只会 dfs 输出拓扑序,所以原创 2014-01-23 01:04:22 · 561 阅读 · 0 评论 -
Codeforces Round225 DIV2 C
这题出的棒极了。深刻的体会到...会拍版,会写各种数据结构算什么!!题目大意: 一排牛,要挤奶,牛 有的往 左看,有的往右看。当牛看到其他牛被挤奶时,奶产量会降低。问最少降低多少?想到贪心非常容易,每次找惊吓其他牛最少的那头开始,问题是怎么找一个挤奶的序列呢?我们来研究任意两头牛的关系对于 A B (A 在 B 的左边)A 左 B 右 随便挤都不会有问题A 右 B 右原创 2014-01-24 01:27:30 · 615 阅读 · 0 评论 -
BZOJ 1588 Splay 入门
平衡树的一个题http://www.lydsy.com:808/JudgeOnline/problem.php?id=1588插入 N 个数, 每次求其和其相差最小的数是几,然后输出绝对值的和。这个题是有问题的。。。。这个OJ上的数据不完整if(scanf("%d", &t) == EOF)t = 0;读到最后要加上这么一句,真吭啊。我以为又是自己哪里写挂了。#原创 2014-01-16 12:11:53 · 570 阅读 · 0 评论 -
Codeforces Round 200 Div1 D Water Tree (树上线段树)
本来早就应该做的,拖拖拖一直拖到了现在。这个题信息量真大。 树上的括号序列,就是按照 dfs 的时序,存在包含关系的节点有祖先儿子关系。 这个题中有三个操作 1 是向某节点加水, 2 是抽水 , 3 是观察 加水之后,所有的儿子也都加满水,放水之后,所有的父亲也都被放水。 这里 data[x][0] 代表 x 是最后被加满时间 data[x][1]原创 2014-01-19 01:07:49 · 729 阅读 · 0 评论 -
CodeForces Round 224 B (二分或图论) C (等差数列 水题)
昨天的 B 题的确有点意思.....他的题目很含蓄 .... 给你 A 和 C ,C 每秒减 1 ,A 的话给你三个数 b, x, w, 若 b >= x ,b = b - x,否则 a = a - 1, b = w - (x - b)(每秒只完成一个分支)。后面那个式子展开后就发现不管在 if 的哪个分支里面,b 都是减去 x 的,只是当 b a = a - k, c = c - n原创 2014-01-18 21:18:53 · 668 阅读 · 0 评论 -
POJ 2586 简单贪心
大意是一个公司在12个月中,或固定盈余s,或固定亏损d.但记不得哪些月盈余,哪些月亏损,只能记得连续5个月的代数和总是亏损(问全年是否可能盈利?若可能,输出可能最大盈利金额,否则输出“Deficit".先判断是否可以组成连续5个月都是亏损,然后把负数放在后面以覆盖更多的区间。#include#include#include#includ原创 2014-01-20 21:25:29 · 468 阅读 · 0 评论 -
POJ 2593 DP 多YY才能行
突然觉得, 那些算法没那么难学了,突然觉得,ACM,就是一个比YY能力的比赛了。想起成都的时候,LCC 大神说这场比赛对初学者和算法学得多的人来说没什么差别。现在想想也是,算法毕竟还是基础,YY能力和代码能力才能决定场上到底能出几道题。这道题纯YY的DP给N个数,求上面这个东西。一开始只想从前面开始怎么找子问题,这个S的子问题...确实不好找,后来就想直接套最长连续子列,用dp原创 2014-01-30 00:27:17 · 660 阅读 · 0 评论 -
POJ HDU上划水...果然没有意思.....
还是老老实实的刷点好题把....原创 2014-02-02 10:35:47 · 424 阅读 · 0 评论 -
POJ 2109 少见多怪,利用double log pow 解决高精度
kn = p,给出n 和 p 求k本来想用二分+高精度来做,当想了想还是觉得有点不靠谱,第一代码实现起来麻烦,第二,复杂度有点悬,case多点就可能超时。就像上次天津的比赛的时候被 ZWJ 爆过的那道题一样,用 log 来解决高精度问题。另外 double 的表示范围是 10^(-307) ~ 10^(-308) 题目中够用了。所以可以搞定。直接计算 pow(p,1/n) ,就完了原创 2014-01-20 11:41:01 · 637 阅读 · 0 评论 -
Codefordes Round 227 C YY 题。。
题意http://codeforces.com/problemset/problem/387/C从前向后找数(单个的或带零的),若从头开始的数大于当前数答案加一,可拆分,否则不可拆分,答案变成1#include#include#include#include#include#includeusing namespace std;#define MAX 200000原创 2014-02-01 11:07:30 · 508 阅读 · 0 评论 -
经典hash. POJ 1840
这道题真是有着不堪回首的过去。。那是。。。。成都之后还是之前,决定是否去杭州的一场和小朋友的“友谊赛”。。一开始延续了当时的思路。。但是还是T,使用mod的 hash 时间复杂度还是不够。不过幸好由于数字比较小,杀手锏直接开个大数组记录答案的个数。前两个变量一组,后三个变量一组,速度还挺快。不过数组用char来开就足够了,用int开的话会MLE。#include #inc原创 2014-02-07 11:57:42 · 479 阅读 · 0 评论 -
POJ 2299 再水一发数状数组求逆序数
这道题用 map 来离散化又T了。。想起来了有一次 CF 怕直接开数组过大使用 map 结果T了的悲剧故事。。。能用数组 hash 的坚决不用 map#include#include#include#include#include#includeusing namespace std;#define ll long long ll bit[1000000];#defin原创 2014-02-04 12:58:19 · 550 阅读 · 0 评论 -
概率 DP POJ 2151
蛮简单的一道概率 DP,有 t 个队,答 m 道题目,给出每个队伍答对每道题的概率求 所有队均答对一道题并且冠军答对不小于 n 题的概率冠军答对超过 n 等价于 存在一个队伍答题不小于 n ,对立事件 所有队伍答题少于 n(当然,在所有队伍答题不少于1的条件下)dp[i][j][k] 代表第i队,前 j 道题目 答对了K 道。我觉得 DP 还是表示状态很重要,表示清楚状原创 2014-02-07 00:22:41 · 500 阅读 · 0 评论 -
POJ 2002 检查正方形
这道题被分类到 hash 里面了,我觉得hash的作用就是快速的查找以来判重和计数这道题要判断的是是否存在点和正方形是否被计数过。前者用 map 和 pair 来解决,后者用个大数组来解决枚举每条边作为正方形上边时候的情况即可。#include #include #include #include #include #include #include using na原创 2014-02-07 13:28:24 · 553 阅读 · 0 评论 -
POJ 2503 二分 还有一些基本字符串的处理
二分嘛,还是 wata 版本的。只要二分查找字符应该出现的位置就好了。就是查字典#include #include #include #include #include #include #include #include using namespace std;struct P{ char e[30]; char f[30]; boo原创 2014-02-07 21:29:43 · 591 阅读 · 0 评论