自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

aozil_yang的博客

点滴记录,记录成长,帮助你我!

  • 博客(41)
  • 收藏
  • 关注

原创 2016亚洲区域赛(大连站) 总结[需要更加努力~]

2016亚洲区域赛 大连站总结ACM第一块银牌,一个良好的开端!   周五下午就匆匆忙忙的赶去大连,路途很长,先赶到了烟台,在从烟台做的轮船到了大连,一路上虽然很累,但都在聊各种话题,还是比较开心愉快的。  先说些题外话,到了大连才4:30,大清早的就赶去大连海事大学,可是早餐都不开门,只能六个人在超市里吃泡面(现在想想还是很搞笑= =),然后一上午等着报道,吃午餐,中午没有睡觉1点左

2016-10-20 09:02:37 1974 2

原创 URAL 1105 Observers Coloring (构造法)

大体题意:你在一个考场里做题,做题时间是t0~t1,有n (n 思路:构造法!知道了每个监考员的入场时间和出场时间,我们可以把它看成一个区间!  最后要求你保留一些区间,使得这个区间只有一个线段的数值总和不小于考试时间 的2/3.我们把 去掉后没有空白的区间给删掉!这样最后给剩下的区间按照左端点进行排序,那么第i 个区间和第i+1个区间一定相交,并且第i 个区间一定不和第i+2

2016-10-31 21:05:21 500

原创 HDU 2340 Obfuscation (DP--记忆话搜索)

大体题意:给你一个包含n 个单词的字典,给你一篇文章,文章包括若干词典里的单词,把句子里的空格都去掉,单词的首位字母都不变,中间的字符集为乱序,问能否恢复这篇文章,使得单词都是词典里的单词,如果有唯一解,输出唯一解!思路:令dp[i]表示从i位置开始到最后一个位置 的解释数量。我们可以采用记忆话搜索的形式!可以用unordered_map >  无序map 来存  中间字符排序

2016-10-30 21:51:50 441

原创 UVA 1161&& UVALive 3645 Objective: Berlin (最大流 -- 时序模型)

大体题意:给你一些航班,你要从s 城市到t 城市,中间可以倒航班,倒航班的时间不得小于30分钟!  告诉你最晚的到达时间,求最大客流量?思路:求最大客流量很明显是求最大流!然后 加了时间 在赛场上就蒙蔽了!其实是时序模型!我们把航班看成一个点,然后拆成i和i + m,这样就考虑了时间的因素! 表示i 的时间更早一些,i+m 的时间更晚一些!只能由i到i+m  ,容量为飞机上

2016-10-29 10:59:32 403

原创 HDU 5920 Ugly Problem (大数模拟 构造回文串)

大体题意:给你一个长度不超过1000的大数,划分成n 个回文串,使得回文串的个数不超过50,并且回文串的和是这个大数!思路:大数模拟!最长长度为1000    个数不超过50,显然必须是log级别的,也就是接近折半的运算!所以我们先根据这个大数的前一半算出这个回文串是多少来,如果这个回文串小于当前的大数,直接减,在继续递归寻找!如果大于当前大数, 你就必须找到一个非常接近它

2016-10-28 00:53:03 507 1

原创 UVA 12169 Disgruntled Judge (扩展欧几里得)

大体题意:给你n 个数 x1,x3,,,x2n-1让你确定出x2,x4,,,x2n来!x数列每一项满足 xi = ((x(i-1) * a ) + b ) % 10001;思路:我们枚举a,因为对10001取模,所以a肯定在0~10000以内有解!那么我们就枚举a,对于每一项a,我们根据x3和x1求出b来,然后开始枚举每一项看看这个a和b 是否合适!合适就输出终止枚举!

2016-10-26 23:54:41 451

原创 Uva 12333 Revenge of Fibonacci (字典树 + 大数加法运算)

大体题意:告诉你一个长度不超过40的字符串,要求找出最小的斐波那契数列的位置 使得这个字符串是那个斐波那契数的前缀!如果100000项以内的斐波那契数列没有它,输出-1!思路:思路很明显:直接先预处理出来1~100000以内的斐波那契数列来, 只用到了高精度加法,拿字符串模拟即可!然后求出一项来,插入到字典树中,字典树每一个节点的权值代表着以他为终点的前缀  是 斐波那契数

2016-10-26 15:39:08 611

原创 POJ 1804 Brainman (归并排序 -- 求逆序对数)

归并排序求逆序对数:和归并排序一样,划分和递归求解都好理解,关键在于合并,对于右边的j ,统计出左边比j 大 的元素个数 f(j),所有的f(j)家和就是我们要的逆序对数!在归并排序中,我们将右边的元素向临时数组中加入的时候,左边还没加入得便是比j 大的元素!  既有m-p个在加右边时,不断累加m-p即可!以 POJ 1804 为例! #include #include #

2016-10-26 15:20:38 851

原创 HDU 5823 color II (状压dp -- 图的染色)

大体题意:给你一个图,要求用最少的颜色染这个图,使得这个图任意直接相连的点颜色不一样!思路:典型的状压dp--图的染色问题!令dp[s] 为染 s 这个状态图  最小的颜色数,其中 s 里 1代表要染色的 0 代表不需要染色!那么显然dp[0] = 0dp[s] = min{dp[s^s0] + 1}其中s0是s 的子集并且  里面的1 在图中不直接相连!判

2016-10-25 21:43:36 821 2

原创 Uva 10911 Forming Quiz Teams(状压dp 最优配对问题)

大体题意:给你2*n 个人,每个人告诉你所处的坐标(二维坐标),要求两两配对,使得配对后距离之和最小?思路:纯粹的最优配对问题!通过这个问题来复习一下 最优配对!记忆化搜索明显递推要快!令dp[s]表示状态s 进行两两配对的最小距离之和!可以这么思考  :先找到前i-1 项除了j  配对最优解,令 i 和j 进行配对!那么只需要枚举j 即可!那么这样的话,i

2016-10-24 20:36:21 525

原创 Canada Cup 2016 D. Contest Balloons (贪心 + 优先队列)

大体题意:给你n 个队伍,你的队伍是第一个队伍,每个队伍有气球数量,和最大数量。如果气球数量多于最大数量,你就会飞走,无法进行排名!你现在可以给你别的队伍气球,使得他们飞走,从而使你的排名尽量靠前!问你的最好名次?思路:借鉴了学长的博客:贪心的方式:你给气球肯定要给气球比你多的人的队伍,让他们飞走后,可能你的名次会下降,但为了更好的名次,你必须在给比你靠前的人的气球,这样给一次

2016-10-24 12:13:14 425

原创 Canada Cup 2016 C. Hidden Word(字符串构造)

大体题意:给你一个字符串,要求构造出一个字符关系来,使得字符串行走顺序必须符合字符关系,其中字符关系是2*13 的字符矩阵, 8个方向都是相邻(当然不可能有8个方向= =)思路:这个题长度是固定的  就是27个字符,开始没看见 还以为很长很长,于是想了好久好久都没有思路~ = =!如果是27个字符 那就随便做着玩了!题目保证 26个字母保证出现至少一次,那么肯定只有一个字母 出

2016-10-24 12:05:11 513

原创 Canada Cup 2016 B. Food on the Plane (数学)

大体题意:给你行号和列号,其中列号为a~f ,有两个服务员同时从1 行和3行出发,求到达你的位置 最少的时间!(还有很多细节,仔细读读不难理解!)思路:一个比较水的数学题:因为一个服务的话,他们能服务四行!因此你要先算出你的行号包括了几个四行!然后在通过取模算出你是被第几个服务员服务的,分类讨论计算一下即可!注意  服务同一行的顺序 是  f  e  d  a b c详

2016-10-24 11:53:51 404

原创 Canada Cup 2016 A - Jumping Ball (枚举水题)

大体题意:给你一个字符串,>字符表示在这个位置你只能向右走,思路:仔细想一想,其实很简单:如果能从左边掉下去,那必须从某个位置一直向左走,所以 从1号位置开始枚举,枚举到第一个>为止!如果从右边掉下去,必须从某个位置一直向右走,所以从n 位置一直向左枚举  枚举到第一个 详细见代码:#include using namespace std;const int max

2016-10-24 11:47:49 363

原创 例题9-14 UVA 1218 Perfect Service 完美的服务(树形dp)

大体题意:给你一个n 个结点的树状结构,要求把一些结点变成服务器,使得每个非服务器结点恰好和一个服务器结点相连,求最少的服务器结点?思路:树形dp思想看了分析才懂的!简单记录一下吧:令dp[i][0] 表示 i 结点是服务器的话,最小的服务器数量!令dp[i][1] 表示 i 结点不是服务器,但是i的父亲是服务器的 最小服务器数量!令dp[i][2] 表示i 结点不是服

2016-10-20 09:28:25 480

原创 POJ 2452 Sticks Problem (RMQ + 预处理)

大体题意:给你n 个数,要求选择一个区间l,r 使得 l~r 之间的数a[i]  满足  a[l] 思路:rmq+预处理!我们可以枚举区间的左端点l,我们需要找到左端点l 的右方第一个小于等于a[l]的位置k,然后我们求出 l ~ k-1区间内的最大值a[pos],如果最大值大于a[l],那么 pos - l 就是答案之一,更新一下最大值即可!那么问题来了:rmq求的是 区

2016-10-19 18:05:15 436

原创 UVA 1220 Party at Hali-Bula (树形dp--树的最大独立集)

大体题意:给你n 个人的上司和下属的关系,让你挑尽可能多的人来参加聚会,参加聚会的条件是 任意两个人不能具有直接的上司下属的关系,求最大人数?思路:树形dp  -- 树的最大独立集问题:只不过多了一个条件,问是否唯一:解法很容易想到了:令dp[i][0]表示 第i 个人 如果不选择的话,最大人数,  令f[i][0] 为第i 个人不选择的话,解是否唯一。同样的  令dp

2016-10-18 16:24:55 385

原创 CCF习题 201612-4 交通规划 (Dijkstra + 贪心)

大体题意:提议不说了 中文的= =思路:既然要求到1的最短距离要存在,我们先用dijkstra算法求出每一个点到1位置的最短距离,然后在看要哪一些边!既然要求路最短 并且包括最短距离,那么我们可以枚举每一条边{u,v,w}当这条路就是v到1位置的最短路之一时,我们就把这条边的权值和已经保存的最小权值进行比较!这样的贪心方法想一想 是很合理的!我们贪心的要 每一个点最短路上的

2016-10-17 20:23:34 3689 1

原创 UVA - 12186 Another Crisis (树形dp)

大体题意:有n 个员工,告诉你这n 个员工的直系老板,0号是大老板,现在员工们要求提出涨工资的建议,但是一个员工提建议必须他的不少于T%的员工给他提建议,他才会提出建议!求让大老板0号 收到建议 ,至少需要几个没有属下的员工?思路:树形DP,令dp[i]表示要让i 员工提出自己的建议,需要多少名工人?那么答案就是dp[0],那么没有属下的员工k,显然dp[k] = 1,在回溯的过程

2016-10-17 18:15:42 376

原创 HDU 3836 Equivalent Sets(tarjan + 压缩强连通)

大体题意:告诉你如果证明A等于B,要证明A是B的子集,并且B是A的子集。现在给你n 个集合,告诉m 个集合的关系,求在加多少个关系使得这N个集合相等?思路:A是B的子集, 用 A到B有一条有向边来代替,那么这个问题就转换为了  在加多少边使得这个图强连通!可以用tarjan算法求出所有的强连通分量,把每一个强连通分量压缩成一个点,这个点内部肯定是强连通,那么就是加边使得这些点强

2016-10-13 23:07:16 424

原创 HDU 1269 迷宫城堡 (Tarjan 算法)

大体题意:有向图中是否是任意两个点都是联通的!思路:有向图的强联通分量表述的就是 是否任意两个点是联通的!那么直接判断 强联通分量是不是1个即可!Tarjan算法!不用记录具体的强联通分量,直接++结果即可!可以用vector 建图!#include #include #include #include using namespace std;const in

2016-10-13 20:39:34 372

原创 UVA 1331 Minimax Triangulation 最大面积最小的三角剖分(区间dp--记忆化搜索)

大大体题意:给你一个n 个点的多边形,输入按着沿着边输入(不用排序),要求分成n-2个三角形,使得这n-2个三角形中最大的三角形的面积尽可能小,输出最小面积!思路:区间dp思想!令dp[i][j] 是用第i 个点到第j 个点能组成最大三角形最小面积!然后枚举i 和j 之间的点作为 第三个点,然后分成两部分 i~k 和k~j 继续寻找!不过有坑:需要注意,如果有个点凹进去

2016-10-13 11:40:57 550

原创 POJ 1185 炮兵阵地 (状压DP || 最大团算法)

思路:直接说思路吧,毕竟中文题目。先说说正解:状压dp:令dp[i][j][k],表示当前枚举到第i 行,第i行的状态为j,前一行的状态为k,所得到最大的炮车数量!内存的优化:分析一下知道,m = 10,状态就有1 因此我们可以先预处理状态来优化!这个题目两个炮车之间的空位置必须大于2,因此那些任意两个1之间的空位置小于等于2的,我们都不要了,这样存到一个数组mb[]里,m

2016-10-12 22:59:35 486

原创 HDU 2089 不要62 (数位dp)

大体题意:求一个区间内满足数 不含4  且 不含62 的数的个数!思路:头一次做数位dp的题目,循环写 怎么也改不过了,又学习了下记忆化搜索版的数位dp!直接统计出每个数来!dp[pos][pre][status] 表示当前枚举第pos位,前一位是pre,  status 为1 表示 已经到达了 包含不吉利数字的状态,为0表示前面还没有到 不吉利数字!那么dfs中 如果 长

2016-10-11 14:50:16 321

原创 例题9-10 UVA 1626 Brackets sequence (dp递推 || 记忆化搜索)

大体题意:括号匹配问题,要求添加尽可能少的括号使得括号匹配  ,其中空括号 是匹配的,括号有[]和()两种!思路:dp思想:令dp[i][j]表示字符串i位置到j位置  最少添加的括号数量!两种方法 递推和 记忆化搜索思路是一样的,说下整体思路:如果i和j 这两个位置能匹配的话,那么转移就是ans = min {dp[i+1][j-1]}然后在类似于最优三角剖分的方法,

2016-10-09 22:44:53 458

原创 最优矩阵链乘(动态规划dp)POJ 1651 Multiplication Puzzle

大体题意:一个n*m的矩阵由n行m列共n*m排列而成。两个矩阵A和B可以相乘当且仅当A的列数等于B的行数。一个n*m的矩阵乘m*p的矩阵,运算量为n*m*p。矩阵乘法不满足分配律,但满足结合律。因此A*B*C既可以按顺序(A*B)*C也可以按A*(B*C)来进行。假设A、B、C分别是2*3、3*4、4*5的,则(A*B)*C运算量是2*3*4+2*4*5=64,A*(B*C)的运算

2016-10-09 20:18:11 1605

原创 例题9-8 UVA 1625 Color Length(DP)

思路:令dp[i][j],表示第一个字符串走到i 位置,第二个位置走到j位置,当前的最小费用!那么直接双重循环进行转移即可!如果i 不等于0,那么可以有dp[i][j] = min(dp[i-1][j] + c[i-1][j])如果j 不等于0,那么可以有dp[i][j] = min(dp[i][j-1] + c[i][j-1])其中 c[i][j]表示   字符串1 走到i

2016-10-09 17:40:50 265

原创 Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) -- D. Dense Subsequence (技巧枚举)

大体题意:给你一个字符串,和一个数m ,要求在这个字符串中选出一些位置,使得任意连续的长度为m 的字符串中至少包括一个这些位置的字符!输出这些字符组成字符串的最小字典序!思路:借鉴了学长的博客!感觉很巧妙:枚举最后一个字母id!然后开始扫这个字符串,如果这个字符小于 id  加入到ans里如果等于id  先用栈记录一下,为什么用栈呢?因为最后用的时候肯定是用最远的一个,

2016-10-09 15:56:33 337

原创 Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) -- A. Checking the Calendar(思路)

大体题意:给你两个星期,判断能否在一个非闰年内  满足这个月第一天是第一个星期,下个月第一天是第二个星期?思路:其实思路很简单,因为这个月和下一个月间隔就三种情况: 差28天 ,30 天,31天,直接看这个星期 加上三个间隔能否到下个星期即可!哈哈 想到这个题目就想笑 自己好水, 竟然把从2015年到20000年的每一年 每一个月的第一天是星期几全都算出来了,然后在枚举!

2016-10-09 12:32:30 286

原创 Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) -- B. Batch Sort(暴力枚举)

大体题意:给你n 行m列 的数字矩阵,要求每一行可选择两个元素进行交换,或者任选两列进行交换,总共最多n+1次操作,使得每一行能否成为递增数列,每一行都是1~m的排列!思路:既然每一行最多操作一个交换, 加上换两列!那么可以暴力了:先枚举换哪一列,或者不换,然后在看每一行是否能一步交换完成递增数列!#include using namespace std;const i

2016-10-09 12:26:24 409

原创 Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) -- C. Ray Tracing(STL乱搞)

大体题意:告诉你一个n*m的矩形,在告诉你 有k 个传感器位于矩形内部,你从(0,0)位置发射一个东西,只能斜着跑,求到达每一个传感器的最短时间,不能到达输出-1,碰到四个角落退出!否则一指弹!思路:充分反应了自己能力的一道题目= =~没有瞎搞出来,赛后补得!可以建立一个map,set >的东西,前一个pair  表示直线,记录直线的斜率k和b(忘了叫啥了= =)第二个se

2016-10-09 12:18:25 612

原创 UVALive 6680 Join the Conversation (DP)

大体题意:给你n 行对话,刚开始告诉你人的姓名,其次是对话内容,要求求一个最长的长度,使得下一个对话的内容包括上一个对话的人的姓名?思路:赛后补得题目:Dp思想!令dp[i]表示枚举到第i 行 所能得到的最大值!===========================================记录一下整个思考的过程吧,因此错了很多遍!首先想到的是利用map 来记

2016-10-07 21:33:39 619

原创 Codeforces Round #375 (Div. 2) -- E. One-Way Reform(dfs求欧拉回路)

大体题意:给你一个无向图,要求不能增边的,给边定向,使得图中入度等于出度的点尽可能多,输出结果,和边的方向!思路:赛后补得,请教了学长的思路(想了一天= =),感觉思路很巧妙:首先,无向图中奇度点的个数一定是偶数个(我才知道,感觉很神奇= = ~)那么我们可以把每个奇度的点与一个新的虚拟结点相连,这样最后我们会得到一个全都是偶数度数的无向图,那么必然存在一条欧拉回路,我们只需要

2016-10-07 00:25:58 669

原创 Codeforces Round #375 (Div. 2) -- F. st-Spanning Tree(并查集 构造生成树)

大体题意:给你一个无向图,要求构造出一个生成树来,使得s,t 的度数不超过ds 和dt,多解任意输出!思路:很好的一道题目,请教了学长!先把s和t结点去掉,构造出多个连通块来,然后依次于s和t 相连!既能连s又能连t的联通块是比较好的,最后在处理,先把那些只能连接一个节点的联通快先连起来,并且计数统计!然后在根据当前的计数来加那些万能联通块。注意:细节比较多,说几个

2016-10-05 10:17:33 456

原创 Codeforces Round #375 (Div. 2) -- C. Polycarp at the Radio(水题)

大体题意:给你n 个数,要求1~m每个数出现次数的最小值尽可能大,要求你修改n个数,要改的次数尽可能小,输出最小值的最大可能和最少修改次数,并把改的数组输出出来!思路:开始没看到次数尽可能少,wa了一次!想一想就知道,最大可能值肯定是 n/m那么直接统计1~m 每个数出现了几次!然后枚举一遍a数组,如果当前值  在1~m范围内!就判断这个数的出现次数  如果小于等于n/m

2016-10-03 22:48:36 541

原创 HDU 5908 Abelian Period(暴力)

大大体题意:给你n 个数字,要求分成k 个连续区间,使得k 个区间数的种类和数量完全一样,求所有的k?思路:直接暴力:枚举k ,1~n/2如果n能整除k  在处理,否则一个区间一个区间排序即可!不能所有区间一次性全排序,会超时!#include #include #include #include using namespace std;const int

2016-10-03 01:01:22 451

原创 Intel Code Challenge Elimination Round (Div.1 + Div.2, combined) -- D. Generating Sets(贪心)

大体题意:给你长度为n 的数组y,求一个数组x,满足y中的每一个元素都可以由x中的元素 进行乘以2  或者 乘以2加1 的操作来得到!要求输出x中的最大元素尽可能小的结果?思路:比赛没有出,赛后补的!贪心思路:先把刚开始的数放到set里,不断取出最大值,然后给当前最大值找到第一个合适的数,不断的找,不断的处理,直到当前最大值不能在小了,结束循环!这种贪心相当于每一步都找到最

2016-10-02 19:13:52 332

原创 Intel Code Challenge Elimination Round (Div.1 + Div.2, combined) -- B. Verse Pattern(水题)

大体题意:给你n 个数字,给你n 行文章,  问是否每一行的元音字母个数于数字对应?  元音字母是a,e,i,o,u,y思路:枚举即可#include using namespace std;const int maxn = 100 + 10;int a[maxn];int main(){ int n; scanf("%d",&n); for (i

2016-10-02 01:02:51 723

原创 Intel Code Challenge Elimination Round (Div.1 + Div.2, combined) -- A. Broken Clock (贪心)

大大体题意:有12小时进制和24小时进制的时间,给你一个时间,hh:mm,如果合法 原样输出,否则修改最少的数字 改成合法的时间!思路:算不上贪心,想清楚就可以了!   其中分钟最简单,  如果 大于59  直接输出  0 + 个位数即可!对于小时来说:如果是24小时进制的:  如果大于23  直接变成 0 + 个位数!如果是12小时进制的:  如果等于0 或者大于12

2016-10-02 00:59:12 472

原创 Intel Code Challenge Elimination Round (Div.1 + Div.2, combined) -- C. Destroying Array (并查集)

大体题意:给你n 个数字,告诉你破坏每个数字的顺序,每次破坏后你要求一个线段,使得线段不包含破坏的点,并且线段上的值和最大?思路:正着删除感觉不好处理,就反过来求了,相当于从一个空序列往上面添加数值,加一次,求一次线段的最大和,在加之前,我们可以先定义一个变量Max 表示之前的操作所得到的最大线段和,然后和加入后进行比较!加入某个值后,用了并查集进行处理,令c[i]是 i 这个点的

2016-10-02 00:37:21 539

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除