bzoj usaco 金组水题题解(1)

UPD:我真不是想骗访问量TAT。。一开始没注意总长度写着写着网页崩了王仓(其实中午的时候就时常开始卡了= =)。。。。损失了2h(幸好长一点的都单独开了一篇)。。。。吓得赶紧分成两坨。。。。TAT。。。。。。。。。。。。。。

——————————————————————————————————————————————————————————————————————————————

  写(被虐)了整整一个月b站上usaco的金组题。。。然而到现在总共只写了100道上下TAT(当然是按AC人数降序排列的了)(另外,是用云神的号写的= =毕竟三百大洋)

  大概不到1\3是自己写的,一半是有大概方向后跑去看题解,剩下的就是毫无思路就去看题解作死的了= =

  感觉金组题还是比较适合自己当前水平的QAQ。。。所以大致的写下题解加深下印象吧。。。对于比较经典而自己又不熟的题打算专门另写题解(瞬间就挖了一个大坑)

这里贴出50道。。。

bzoj 1597:[Usaco2008 Mar]土地购买

  斜率优化入门题。f[i]表示买前i块土地的最小费用

  f[i]=min{
      f[j]+max_w(j+1,i)*max_l(j+1,i),( 0<=j<i )
  }// max_w(j+1,i)和max_l(j+1,i)分别表示第j+1块土地到第i块土地中宽度和长度的最大值

  首先去掉那些被别的土地完全覆盖的土地(因为不会对答案有任何影响),剩下的按宽度排序。宽度升序排序的话,长度一定是降序的(被完全覆盖的都被去掉了)

  方程就变成  f[i]=min{  f[j]+wid[i]*len[j+1]  },(0<=j<i)

  剩下的就是斜率优化了。。。

bzoj 1699:[Usaco2007 Jan]Balanced Lineup排队

  rmq裸题。。。因为不涉及区间修改的操作所以可以用线段树的点树写法(建成一个堆)来写。。。

bzoj 1230:[Usaco2008 Nov]lites 开关灯

  线段树区间修改。。。

bzoj 1666:[Usaco2006 Oct]Another Cow Number Game 奶牛的数字游戏

  代码长度知一切系列。。直接模拟即可

bzoj 1724:[Usaco2006 Nov]Fence Repair 切割木板

  反过来看就是合并果子。。维护小根堆,每次把最短的两段木板并起来,直到变成一段

bzoj 1726:[Usaco2006 Nov]Roadblocks第二短路

  求严格次短路。。。最短路改一下。。同时记录到达某个点的最短距离和严格次短距离

  为了压常数把本来的代码长度改长了不少(反正本来也就毫无可读性= =)。。

bzoj 1231:[Usaco2008 Nov]mixup2 混乱的奶牛

  题目是要求能使排列混乱的方案数。语死早。。数据范围显然状压。。

  f[i][j]表示当前已选入列奶牛的状态为i,最后一头牛编号为j的混乱方案数,(0<i<2^n,1<=j<=n)

  f[0][0]=1;f[i][j]=sum{f[i-2^j][k]},(S[k]-S[j]的绝对值>K,j存在于状态i中)

bzoj 1572: [Usaco2009 Open]工作安排Job

  按截止时间降序排序。也就是时间从大到小枚举,每个时间点安排价值最大、且截止时间在当前时间点之前的工作

  具体实现就不能一个一个时间点枚举了。。在相邻工作的截止时间之间的时间点,可以完成的工作都是不变的

  单调队列优化一下。

bzoj 1579: [Usaco2009 Feb]Revamping Trails 道路升级

  分层图最短路。。。dis[i][j]表示到i点,共更新了j条边的最短路径长度。

  按照更新的边数建K+1层图,第i层表示当前更新了(i-1)条边。除了在本层内扩展外,第1~K层的点还可以向更高的一层扩展(更新当前边为0)

bzoj 1708: [Usaco2007 Oct]Money奶牛的硬币

  完全背包。。。一开始竟然没看出来王仓

bzoj 1690: [Usaco2007 Dec]奶牛的旅行

  01分数规划。。。二分答案为mid,将原图的边(u,v,time)重建为(u,v,fun[v]-time*mid),如果新图中有负环那么当前答案可行

bzoj 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式

  字符串http://www.cnblogs.com/czllgzmzl/p/4989723.html

bzoj 1692: [Usaco2007 Dec]队列变换

  贪心。。。当前剩下的队伍为[l,r],每次比较 l到r 这段字符串和 r到l 这段字符串,哪段小选哪段

  比较字符串大小的时候可以用hash+二分求出最长公共前缀的长度,再比较下一位的大小

  hash用unsigned int不会被卡。。。感人。。明显优势#1

  然而O(n^2)暴力可过TAT

bzoj 1782: [Usaco2010 Feb]slowdown 慢慢游

  dfs序,一头牛走到点i,相当于将点i所在子树的权值都+1,查询的时候查询牛要走到的点的权值

  也可以差分,变成点修改+区间查询,用树状数组就行了。。。

  太傻逼用线段树然后被常数感动哭了

bzoj 1827: [Usaco2010 Mar]gather 奶牛大集会

  O(n^2)的暴力就是对每个点都把整棵树遍历一遍

  考虑一下,假设求出了到当前点i的不方便值为fasum,如何快速计算i的儿子的不方便值

  先预处理出每个点的子树内奶牛总数存在size[],那么对于i的某个儿子j,所有不在j的子树里的奶牛都得多走从i->j这段路,而j子树里的奶牛都可以少走i->j这段路

  nowsum=fasum+(cownum-size[j])*dis(i,j)-size[j]*dis(i,j);

bzoj 1592: [Usaco2008 Feb]Making the Grade 路面修整

  显然(看题解才知道的TAT)一段路修整后,高度一定和原来那些路中的某一段相等。。。。所以把高度离散化一下就变成O(n^2)的dp了。。。

  不下降的情况:f[i][j]表示前i段路,第i段高度修整为j的最小支出

          f[i][j]=min{ f[i-1][k]+abs(h[i]-h[j]) },(k<=j)转移的过程中顺便记录一下k就行了

  不上升就倒过来做一遍

bzoj 1725:[Usaco2006 Nov]Corn Fields牧场的安排

  数据范围就是状压了。。

  f[i][j]表示前i行,第i行种草状态为j的总方案数。

  f[i][j]=sum{ f[i-1][k] },j状态和k状态是合法的(没种到那一行贫瘠的土地,且没有草相邻),且j&k==0(没有上下两行没有草在同一列)

  预处理了各种非法情况结果比直接枚举慢= =

bzoj 1711:[Usaco2007 Open]Dingin吃饭

  二分图最大匹配。。s连奶牛,饮料和食品连t,每头牛往它要吃的东西连边。。。用dinic比匈牙利算法慢了点

bzoj 1668: [Usaco2006 Oct]Cow Pie Treasures 馅饼里的财富

  裸dp。f[i][j]表示走到第i列,第j行最大财富,

  f[1][1]=map[1][j];f[i][j]=max{f[i-1][j-1],f[i-1][j],f[i-1][j+1]}

  注意边界。。。。第0、n+1行和第1列初始化成负无穷QAQ

bzoj 1571: [Usaco2009 Open]滑雪课Ski

  dp,f[i][j]表示前i时间过后,能力值为j的最大滑雪次数

  f[i][j]=max{

    f[i-1][j],//开颓

    f[ i-Dmin[j] ][ j ]+1,//先把斜坡按所需能力排序,Dmin[j]表示 所需能力值<=j的斜坡中 所需最小时长

    g[ i-L[k] ],//上第k节课(前提是有课= =),g[i]表示f[i][1..100]中的最大值

  }

  代码丑得不忍直视。。。

bzoj 1715: [Usaco2006 Dec]Wormholes 虫洞

  询问图中有没有负环。。。(回到过去必须是回到起点并且时间比出发时还早)

  dfs版的spfa判负环。。

bzoj 1596: [Usaco2008 Jan]电话网络

  树形dp。。http://www.cnblogs.com/czllgzmzl/p/5064626.html

bzoj 2442: [Usaco2011 Open]修剪草坪

  单调队列。。

  最大效率==总效率-最小损失效率。f[i]表示前i头奶牛,因为不能有连续K只奶牛而损失的效率的最小值(第i头牛不安排)。

  f[i]=min{ f[j] } +E[i],(i-j<=K)

bzoj 1233:  [Usaco2009Open]干草堆tower

  斜率优化。。。

  看了别人(似乎是wshjzaa?)题解才明白TAT  http://www.cnblogs.com/sagitta/p/4650681.html

  注:题解最后似乎有个地方<和>打反了?(或者是我语文不好。。)

bzoj 1707:  [Usaco2007 Nov]tanning分配防晒霜

  贪心。。http://www.cnblogs.com/czllgzmzl/p/5064620.html

bzoj 1709: [Usaco2007 Oct]Super Paintball超级弹珠

  难得的傻逼题。。可以O(n^3)无脑暴力。。。

  或者是先预处理一下,读入时处理出 每一行、每一列、每一条对角线的对手数量。。。当然还有每一个点上的对手数

  某个射击位置(x,y)能打到的对手数就是 第x行的对手数+第y行的对手数+所在两条对角线的对手数-3*((x,y)这个点上的对手数)

bzoj 1576: [Usaco2009 Jan]安全路经Travel

  并查集正确姿势。。http://www.cnblogs.com/czllgzmzl/p/5064758.html

bzoj 1593: [Usaco2008 Feb]Hotel 旅馆

  比较正常的线段树题目。。。维护一段只有0和1的区间里面,最长的0的长度,从左边开始、从右边开始的最长的0的长度

  每次查找区间位置的时候,如果左子树里的够长就去左子树找,不然试试跨过左右子树的那段,最后才去右子树里找。(无解直接输出0)

  区间修改的话就维护一个标记,表示当前区间被覆盖的情况(客人订满、客人退空、已下传)

  1A感人TAT

bzoj 1697: [Usaco2007 Feb]Cow Sorting牛排序

  置换群。。现在还是不会置换群QAQ。。。不过至少这题的题解看得懂QAQ。。。

  题解网上一坨。。因为poj里也有= =

bzoj 1828: [Usaco2010 Mar]balloc 农场分配

  把各个请求按右端点从小到大排序。。然后直接依次能满足的就满足。。。这样就行了。。。。至于为什么这样子贪心是对的。。TAT

  设区间左右端点为l[],r[]...

  因为是按r排序的:如果当前区间插入后会影响到后面的某个区间的话,那么相比于那个被影响的区间,插入当前区间更优。

           并且在插入当前区间前我们已经尽量满足了r更小的区间,所以当前区间对之前的区间无影响。

bzoj 1589: [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果

  就是求后继节点的总数。。。因为整张图是由若干个基环内向树组成,所以可以用tarjan缩点后做。。。

  不过因为是基环内向树(同今年noipD1T2)。。从某个点开始一直走就会把它所连向的环走遍,也就起到了缩点的效果。。

  具体就开个栈记录一下当前路径,记录一个点是否在栈中。注意已经求出后继节点数的点就不用再走了.

//之前弄了半天依然被踩在#2。。。。知道刚刚才想到一个布尔数组不用开才弄到200ms。。。再加了个输出优化瞬间就176ms了= =感人肺腑

  

//为什么我每次用register int都更慢

bzoj 1754: [Usaco2005 qua]Bull Math

  高精度乘法。。。。。。。。。。。。。。出题人为了题目覆盖范围竟然如此。。。。。

bzoj 1770: [Usaco2009 Nov]lights 燈

  高斯消元解异或方程组。。。。自由元就暴力枚举+最优性剪枝= =。。。

  话说自由元啊什么的一直不懂。。。数学方面以后再慢慢补吧(已经无数次这么说了TAT

  抄了黄学长代码。。捂脸

bzoj 1691: [Usaco2007 Dec]挑剔的美食家

  有点像bzoj1828。。。都是两个限定条件,虽然具体有点不同= =

  把奶牛按要求最低价升序排序,牧草按价格升序排序。

  枚举牧草,每种牧草让可接受它的奶牛中,对新鲜度要求最高的奶牛吃。

  具体就是用平衡树维护可接受当前价格的奶牛(会越来越多)的要求新鲜度。。每种牧草按新鲜度在树中找一下前驱。

  手打treap比调stl的慢= =

bzoj 1753: [Usaco2005 qua]Who‘s in the Middle

  如题。。。。。。。。。。。。。。。。

  加了快速读入比没加的慢是什么情况= =

bzoj 1574: [Usaco2009 Jan]地震损坏Damage

  就是说对于报告的每个点,都要找到一圈点把它围起来(与1点阻断)。。显然(又是看题解才知道的QAQ)这一圈点就是那个点相邻的所有点(当然相邻点也可能是被报告的点,但总之这些点都无法到达了)。。

  因为圈内的点都无法到达,我们要使得圈上及圈内的点最少。。所以圈越小越好。。

  把每个报告的点的相邻节点都设为不可通过,最后统计下还能到达的点的数目就好。

bzoj 1584: [Usaco2009 Mar]Cleaning Up 打扫卫生

  DPhttp://www.cnblogs.com/czllgzmzl/p/5066443.html

bzoj 1710: [Usaco2007 Open]Cheappal 廉价回文

  因为最后要形成回文串。。。对于回文串来说删一个字母和 在对应位置添加一个同样的字母是等价的= =

  所以把一个字母和谐掉的代价是min(删除该字母费用,添加该字母费用)。。(记为cost[])

  接下来就是区间dp了。。。f[i][j]表示把原字符串中第i个~第j个字母变成回文串的最小代价。。原字符串为s

  f[i][j]=min{

    f[i][j-1]+cost[s[j]],f[i+1][j]+cost[s[i]],

    f[i+1][j-1],(s[i]==s[j])

  }最后答案就是f[1][m]

bzoj 1703: [Usaco2007 Mar]Ranking the Cows 奶牛排名

  善用stl。。。善调bitset。。。

  按给出的大小关系建图。。求出每头牛i能确定的比它小的奶牛的数量num[i],答案就是 总对数-已知的关系对数。

  为啥同样是调bitset我就慢了这么多TAT

bzoj 1578: [Usaco2009 Feb]Stock Market 股票市场

  看了老司机的题解。。。http://www.cnblogs.com/JSZX11556/p/4664348.html

  引用:“我们假设每天买完第二天就卖掉( 不卖出也可以看作是卖出后再买入 ), 这样就是变成了一个完全背包问题了, 股票价格为体积, 第二天的股票价格 - 今天股票价格为价值.... 然后就一天一天dp...”。

bzoj 1598: [Usaco2008 Mar]牛跑步

  求第k短路。。看了kpm大爷的代码才知道可以懒出新境界。。。

  用优先队列维护spfa的队列(其实就变成了堆优化的dij)。。一个点出队k次时我们就得出了k短路。。。。

bzoj 2060: [Usaco2010 Nov]Visiting Cows 拜访奶牛

  终于是傻逼题了。。。没有上司的舞会。树形dp,f[i][0]表示以i为根节点,i不选,能选的最多点数,f[i][1]表示以i为根节点,i选,能选的最多点数。

  f[i][0]=sum{ max(f[j][0],f[j][1]) },(j是i的儿子);f[i][1]=sum{ f[j][0] },(j是i的儿子)

bzoj 1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列

  和bzoj4236那题思路一样。。。求得各种颜色数的前缀和,并差分。。如果两不同位置上差分后的结果相等,就说明这两个位置之间各种颜色数量相等。

  可以上hash。。。然而卡常无力被稳稳地踩了TAT

bzoj 1704: [Usaco2007 Mar]Face The Right Way 自动转身机

  如果K已经确定的话,可以O(n)求出最小判断次数M:从前往后扫一遍,如果一个点i上奶牛朝后站着,就把i~i+k-1头奶牛都转过来。因为此时不转的话以后就转不了了。。。

  注意无解的判定。。。如果第i头奶牛朝后站着且i+k>n(就是没有k头奶牛可以转了)就无解。。。

  区间修改,单点查询。。。这个可以用差分。。因为只有朝前和朝后两种,就直接异或一下就好了。时间复杂度O(n*k)

bzoj 1776: [Usaco2010 Hol]cowpol 奶牛政坛

  由题解可得(TAT)结论:某政党内部的最长路径一定有一个端点是政党内最深的一个点。。毕竟树的直径也有一个端点在叶子节点上?

  先一遍dfs求出每个政党最深的点,然后求它和所在政党其他点的距离的最大值。。树上两点间的距离dis(i,j)=depth[i]+depth[j]-depth[lca(i,j)]*2。。

  总时间复杂度O(nlogn)...求lca部分试了倍增和链剖两种。。。。代码长度差不多但是倍增慢多了QAQ

//链剖

//倍增

bzoj 1700: [Usaco2007 Jan]Problem Solving 解题

  DP。。http://www.cnblogs.com/czllgzmzl/p/5068024.html

bzoj 1734: [Usaco2005 feb]Aggressive cows 愤怒的牛

  傻逼题。。二分答案+判定。。。。每次二分出一个答案mid后,贪心的划分,看一下能不能划出C段

bzoj 1741: [Usaco2005 nov]Asteroids 穿越小行星群

  二分图最大匹配。。。存在小行星(i,j),连一条i到j+n的边。

  dinic比匈牙利还是略慢。。

bzoj 1705: [Usaco2007 Nov]Telephone Wire 架设电话线

  DPhttp://www.cnblogs.com/czllgzmzl/p/5068259.html

bzoj 1783: [Usaco2010 Jan]Taking Turns

  有点算博弈相关?http://www.cnblogs.com/czllgzmzl/p/5069730.html

时间: 2024-10-11 03:25:13

bzoj usaco 金组水题题解(1)的相关文章

bzoj usaco 金组水题题解(2.5)

bzoj 2197: [Usaco2011 Mar]Tree Decoration 树形dp..f[i]表示处理完以i为根的子树的最小时间. 因为一个点上可以挂无数个,所以在点i上挂东西的单位花费就是i所在子树里的最小单位花费.. 所以每次求f[i]只要使子树里的数量都满足要求就好了..i的祖先还要更多的话随时可以选某个节点多挂一些.. f[i]=sum{f[j]}+mincost[i]*max(need[i]-sum{need[j]},0)..(j是i的儿子,mincost[i]表示子树i里的

noip2008普及组3题题解-rLq

(第一次写题解,随意喷) (只是前一天的作业哈) (先凑个数) 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏.游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师在此吹哨子时,传球停止,此时,拿着球没有传出去的那个同学就是败者,要给大家表演一个节目.聪明的小蛮提出一个有趣的问题:有多少种不同的传球方法可以使得从小蛮手里开始传的球,传了m次

noip2008普及组4题题解-rLq

(啊啊啊终于补到了今天的作业了) 本题地址:http://www.luogu.org/problem/show?pid=1058 题目描述 小渊是个聪明的孩子,他经常会给周围的小朋友们将写自己认为有趣的内容.最近,他准备给小朋友们讲解立体图,请你帮他画出立体图.小渊有一块面积为m*n的矩形区域,上面有m*n个边长为1的格子,每个格子上堆了一些同样大小的积木(积木的长宽高都是1),小渊想请你打印出这些格子的立体图.我们定义每个积木为如下格式,并且不会做任何翻转旋转,只会严格以这一种形式摆放:每个顶

BZOJ 4291: [PA2015]Kieszonkowe 水题

4291: [PA2015]Kieszonkowe Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id=4291 Description 给定n个数,请从中选出若干个数,使得总和为偶数,请最大化这个总和. Input 第一行包含一个正整数n(1<=n<=1000000). 第二行包含n个正整数a_1,a_2,...,a_n(1<=a_i<=1000).

noip2010提高组3题题解 by rLq

本题地址http://www.luogu.org/problem/show?pid=1525 关押罪犯 题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用“怨气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度,怨气值越大,则这两名罪犯之间的积怨越多.如果两名怨气值为c 的罪犯被关押在同一监狱,他们俩之间会发生摩擦,并造成影响力为c 的冲突事件. 每年年末,警察局会将本年内监狱中

5.6水题记录

BZOJ 1029 确实是水题,由于人弱想了半天. 这题我以前好像做到过T^T... 原来贪心就可以了.据gty说,贪心策略: 能加则加 不能加尽量省出时间来. 感觉好奇葩,不知道为什么是对的...感觉正确性并不显然...先这么写了. #include <cstdio> #include <ext/pb_ds/priority_queue.hpp> #include <algorithm> __gnu_pbds::priority_queue<int,std::l

USACO银组12月月赛题解

USACO银组12月月赛题解 Convention 题面 一场别开生面的牛吃草大会就要在Farmer John的农场举办了! 世界各地的奶牛将会到达当地的机场,前来参会并且吃草.具体地说,有N头奶牛到达了机场(1≤N≤105),其中奶牛i在时间ti(0≤ti≤109)到达.Farmer John安排了M(1≤M≤105)辆大巴来机场接这些奶牛.每辆大巴可以乘坐C头奶牛(1≤C≤N).Farmer John正在机场等待奶牛们到来,并且准备安排到达的奶牛们乘坐大巴.当最后一头乘坐某辆大巴的奶牛到达的

【BZOJ】初级水题列表——献给那些想要进军BZOJ的OIers(自用,怕荒废了最后的六月考试月,刷刷水题,水水更健康)

BZOJ初级水题列表——献给那些想要进军BZOJ的OIers 代码长度解释一切! 注:以下代码描述均为C++ RunID User Problem Result Memory Time Code_Length 695765 Eolv 1000 Accepted 804 kb 0 ms 118 B 739478 Eolv 2463 Accepted 804 kb 0 ms 134 B 696662 Eolv 1968 Accepted 1272 kb 48 ms 137 B 739546 Eolv

刷usaco水题的一些启示

就是断断续续刷了一些银组的题,虽说真的有点水,因为这些题大多是简单转化一下模型就可以了,但还是有一些启示吧 bzoj1618 完全背包的方程要理解好 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 const int maxh=50005; 6 const int maxn=105; 7 const int inf=3e8; 8 int weigh