BZOJ-USACO被虐记
bzoj上的usaco题目还是很好的(我被虐的很惨。
有必要总结整理一下。
1592: [Usaco2008 Feb]Making the Grade 路面修整 一开始没有想到离散化。然后离散化之后就很好做了。F[I,j]表示第i个点,高度>=j或<=j,f[I,j]=min(f[i-1,j]+abs(b[j]-a[i]),f[I,j-1])
1593: [Usaco2008 Feb]Hotel 旅馆 线段树
★1594: [Usaco2008 Jan]猜数游戏 二分答案然后写线段树维护
1596: [Usaco2008 Jan]电话网络 树形dp,分三种情况考虑,①i选儿子都覆盖②i不选儿子都覆盖并覆盖i③i不选儿子都覆盖不覆盖i
1597: [Usaco2008 Mar]土地购买 斜率优化
1598: [Usaco2008 Mar]牛跑步 k短路
1599: [Usaco2008 Oct]笨重的石子 搜索
1600: [Usaco2008 Oct]建造栅栏 构成四边形的条件是三边和大于第四边,于是所有的边都必须小于n div 2,所以有个dp,f[i,j]表示前i条边和为j,f[i,j]+=f[i-1,j-k],边界:f[0,0]=1,目标:f[4,n]
1601: [Usaco2008 Oct]灌水 建多一个点然后mst
1602: [Usaco2008 Oct]牧场行走 lca
1603: [Usaco2008 Oct]打谷机 搜索
★1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居 并查集+set
★1605: [Usaco2008 Open]Crisis on the Farm 牧场危机 搜索
1606: [Usaco2008 Dec]Hay For Sale 购买干草 背包
1607: [Usaco2008 Dec]Patting Heads 轻拍牛头 首先这道题正着算不好算,那么反着算,对于每个ai把它的贡献值算出来就好
1609: [Usaco2008 Feb]Eating Together麻烦的聚餐 记f[i,j]为前i个数,末尾是j,f[i,j]=min(f[i,j],f[i-1,k],f[i-1,k]+1(a[i]<>j))。
1610: [Usaco2008 Feb]Line连线游戏 暴力
1611: [Usaco2008 Feb]Meteor Shower流星雨 bfs
1612: [Usaco2008 Jan]Cow Contest奶牛的比赛 对于每个人,只要比他强+比他弱的人=n-1那么他的排名就确定了。然后跑个floyed
1613: [Usaco2007 Jan]Running贝茜的晨练计划 简单dp
1614: [Usaco2007 Jan]Telephone Lines架设电话线 二分答案跑spfa,每条边大于的就是1小于等于的就是0,然后只要看dis[t]<=k即可
1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛 简单模拟一下
1617: [Usaco2008 Mar]River Crossing渡河问题 简单dp
1618: [Usaco2008 Nov]Buying Hay 购买干草 背包
1619: [Usaco2008 Nov]Guarding the Farm 保卫牧场 题意其实就是从最高点开始灌水,然后一直灌水。然后没了。
1620: [Usaco2008 Nov]Time Management 时间管理 按时间限制排序,然后累加工作时间,ans=min(tl[i]-sum),注意一下-1
1621: [Usaco2008 Open]Roads Around The Farm分岔路口 根据题意计数,递归下去就可以了。
1622: [Usaco2008 Open]Word Power 名字的能量 随便水
1623: [Usaco2008 Open]Cow Cars 奶牛飞车 二分去找可以取x只,首先ai小的要在前面,然后因为有m条车道所以每个点的权值就是ai-cnt*d,cnt就是当前是第几个m
1624: [Usaco2008 Open] Clear And Present Danger 寻宝之路 floyed
1625: [Usaco2007 Dec]宝石手镯 背包dp
1626: [Usaco2007 Dec]Building Roads 修建道路 写个堆
1627: [Usaco2007 Dec]穿越泥地 spfa
1628: [Usaco2007 Demo]City skyline 单调栈
1629: [Usaco2007 Demo]Cow Acrobats 按题意建不等式排序
1630: [Usaco2007 Demo]Ant Counting 同2023
1631: [Usaco2007 Feb]Cow Party spfa
1633: [Usaco2007 Feb]The Cow Lexicon 牛的词典 因为每一个点都能删,而且n挺小的。从n到1dp,f[i]=min(f[i+1]+1,f[i+len[j]+t]+t,t是在扫字符串的时候删除的点数,扫的话就是一直调整长字符串的位置,直到与匹配字符串相等。
1634: [Usaco2007 Jan]Protecting the Flowers 护花 排序完扫一遍
△1636: [Usaco2007 Jan]Balanced Lineup 写个rmq
1637: [Usaco2007 Mar]Balanced Lineup 前缀和扫一遍就可以了。符合条件的肯定是前缀和相同的。
1638: [Usaco2007 Mar]Cow Traffic 奶牛交通 其实就是入度为0的点到边起点的路径数*边终点到n的路径数,起点用反着搜,终点用正着搜。
1639: [Usaco2007 Mar]Monthly Expense 月度开支 二分
1640: [Usaco2007 Nov]Best Cow Line 队列变换 用后缀数组维护每个点的前缀和后缀,对于l和r比较后缀l和前缀r的rank值大小,然后贪心插进答案里面就可以了
1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏 floyed
1642: [Usaco2007 Nov]Milking Time 挤奶时间 贪心
1643: [Usaco2007 Oct]Bessie's Secret Pasture 贝茜的秘密草坪 暴力
1644: [Usaco2007 Oct]Obstacle Course 障碍训练课 bfs一下
1646: [Usaco2007 Open]Catch That Cow 抓住那只牛 把转移抽象成连边,然后最短路
1647: [Usaco2007 Open]Fliptile 翻格子游戏 因为每个点顶多翻一次,而且做完第一行之后的状态是唯一的。N=15,考虑状态压缩,对每个状态都按题意翻一遍,之后的I,j是否要翻只看i-1,j是否为1即可。
1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐 dfs一遍。
1649: [Usaco2006 Dec]Cow Roller Coaster 简单dp
1650: [Usaco2006 Dec]River Hopscotch 跳石子 二分
1651: [Usaco2006 Feb]Stall Reservations 专用牛棚 前缀和
1652: [Usaco2006 Feb]Treats for the Cows 区间dp,首先时间是确定的,枚举时间,再枚举左端点,从而知道右端点,那么f[I,j]=max(f[i+1,j]+a[i]*t,f[I,j-1]+a[j]*t),也就是看左右端点哪个最后取。
1653: [Usaco2006 Feb]Backward Digit Sums 黑科技,next_permutation
1654: [Usaco2006 Jan]The Cow Prom 奶牛舞会 裸tarjan
1655: [Usaco2006 Jan] Dollar Dayz 奶牛商店 裸背包+高精加
1657: [Usaco2006 Mar]Mooo 奶牛的歌声 维护一个单调递减的栈,然后不符合单调的话就把值全部加到那个大数上面去。做两遍。
1660: [Usaco2006 Nov]Bad Hair Day 乱发节 单调栈
1661: [Usaco2006 Nov]Big Square 巨大正方形 枚举正方形的一条边,然后去根据对角线相等判断一下。
★★1662: [Usaco2006 Nov]Round Numbers 圆环数 数位dp
1663: [Usaco2006 Open]赶集 最长路,取反就是最短路了。
1664: [Usaco2006 Open]County Fair Events 参加节日庆祝 按右界排序,然后dp,f[i]=max(f[i-1],f[a[i].x]+1)
1666: [Usaco2006 Oct]Another Cow Number Game 奶牛的数字游戏 水
1668: [Usaco2006 Oct]Cow Pie Treasures 馅饼里的财富 简单dp
1669: [Usaco2006 Oct]Hungry Cows饥饿的奶牛 最长上升子序列
△1670: [Usaco2006 Oct]Building the Moat护城河的挖掘 凸包
1671: [Usaco2005 Dec]Knights of Ni 骑士 暴力bfs一遍就没了。
1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚 线段树优化dp,按左界排序,因为一个点取了影响的是一段区间的值,所以用线段树单点询问区间修改。
1673: [Usaco2005 Dec]Scales 天平 做个背包就可以了
1674: [Usaco2005]Part Acquisition 裸最短路
1677: [Usaco2005 Jan]Sumsets 求和 其实做个背包就可以了。
1679: [Usaco2005 Jan]Moo Volume 牛的呼声 排序,简单的计数问题
1680: [Usaco2005 Mar]Yogurt factory 贪心
1682: [Usaco2005 Mar]Out of Hay 干草危机 生成树
1683: [Usaco2005 Nov]City skyline 城市地平线 单调栈
1684: [Usaco2005 Oct]Close Encounter 水
★1685: [Usaco2005 Oct]Allowance 津贴 贪心。。首先那些比c大的肯定全选,然后从大到小先给。然后不够的话就塞一个最小的进去。
1688: [Usaco2005 Open]Disease Manangement 疾病管理 状压dp
1689: [Usaco2005 Open] Muddy roads 泥泞的路 贪心
★1690: [Usaco2007 Dec]奶牛的旅行 最优比率环
1691: [Usaco2007 Dec]挑剔的美食家 写个treap维护一下
★1692: [Usaco2007 Dec]队列变换 在sa辅助下的贪心
1693: [Usaco2007 Demo]Asteroids 二分图匹配。
★1696: [Usaco2007 Feb]Building A New Barn新牛舍 二维中位数
1697: [Usaco2007 Feb]Cow Sorting牛排序 贪心排序一下
1698: [Usaco2007 Feb]Lilypad Pond 荷叶池塘 边连好做一遍宽搜
1700: [Usaco2007 Jan]Problem Solving 解题 贪心
★1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列 二进制拆出来后对串作拆分然后维护个map找下相同值就可以了。
△1703: [Usaco2007 Mar]Ranking the Cows 奶牛排名 bitset大法好,把边连起来扫一遍,把关系传递下去就好了。
★1704: [Usaco2007 Mar]Face The Right Way 自动转身机 贪心,枚举k枚举m,如果前面的都是正的那就不用管,负的那就只能转[i,i+k),然后发现前面的操作对后面有影响,维护一个xor值就可以了。
1705: [Usaco2007 Nov]Telephone Wire 架设电话线 做个dp就可以了
1706: [usaco2007 Nov]relays 奶牛接力跑 建完图跑一遍矩阵乘法
1710: [Usaco2007 Open]Cheappal 廉价回文 在字符串上暴力做一遍dp
1711: [Usaco2007 Open]Dingin吃饭 三分图建边跑流
★1712: [Usaco2007 China]Summing Sums 加密 可以找到规律,做a[i]=sum-a[i],重复t次,sum=sum*(n-1)^t。于是可以构造一个很小的矩阵去乘就可以了。
1715: [Usaco2006 Dec]Wormholes 虫洞 spfa判负环
★1716: [Usaco2006 Dec]The Fewest Coins 找零钱 做两个背包。
1717: [Usaco2006 Dec]Milk Patterns 产奶的模式 建出后缀数组扫一遍height数组
1718: [Usaco2006 Jan] Redundant Paths 分离的路径 tarjan缩点后乱搞。
1720: [Usaco2006 Jan]Corral the Cows 奶牛围栏 按x轴排序一遍,然后二分判定
1724: [Usaco2006 Nov]Fence Repair 切割木板 其实就是合并果子啦
★1725: [Usaco2006 Nov]Corn Fields牧场的安排 状压dp
1726: [Usaco2006 Nov]Roadblocks第二短路 最短路变种
1727: [Usaco2006 Open]The Milk Queue 挤奶队列 按题意列不等式排序
★1730: [Usaco2005 dec]Barn Expansion 牛棚扩张 拆成8个事件点扫描线一发。
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<cmath> #include<queue> #define esp 1e-7 #define inf int(1e9) #define rep(i,l,r) for (int i=l;i<=r;i++) #define down(i,l,r) for (int i=l;i>=r;i--) #define clr(x,y) memset(x,y,sizeof(x)) #define maxn 200500 #define mm 1000000007 using namespace std; typedef long long ll; struct data{int x,y,t,id; }a[maxn],b[maxn]; int vis[maxn],q[maxn],n,ans,tot,cnt,cnt2; ll read(){ ll x=0,f=1; char ch=getchar(); while (!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();} while (isdigit(ch)) x=x*10+ch-'0',ch=getchar(); return x*f; } bool cmpx(data a,data b){ if (a.x!=b.x) return a.x<b.x; if (a.y!=b.y) return a.y<b.y; return a.t>b.t; } int main(){ // freopen("in.txt","r",stdin); n=read(); int x1,x2,y1,y2; rep(i,1,n){ x1=read(); y1=read(); x2=read(); y2=read(); a[++cnt]=(data){x1,y1,1,i}; a[++cnt]=(data){x1,y2,-1,i}; a[++cnt]=(data){x2,y1,1,i}; a[++cnt]=(data){x2,y2,-1,i}; b[++cnt2]=(data){y1,x1,1,i}; b[++cnt2]=(data){y1,x2,-1,i}; b[++cnt2]=(data){y2,x1,1,i}; b[++cnt2]=(data){y2,x2,-1,i}; } sort(a+1,a+1+cnt,cmpx); tot=0; rep(i,1,cnt){ if (a[i].t==1) { if (tot) { rep(j,1,tot) vis[q[j]]=1; vis[a[i].id]=1; } q[++tot]=a[i].id; } else rep(j,1,tot) if (q[j]==a[i].id) {q[j]=q[tot--]; break;} } sort(b+1,b+1+cnt2,cmpx); rep(i,1,cnt2){ if (b[i].t==1) { if (tot) { rep(j,1,tot) vis[q[j]]=1; vis[b[i].id]=1; } q[++tot]=b[i].id; } else rep(j,1,tot) if (q[j]==b[i].id) {q[j]=q[tot--]; break;} } rep(i,1,n) if (vis[i]==0) ans++; printf("%d\n",ans); return 0; }
△1731: [Usaco2005 dec]Layout 排队布局 差分约束
1733: [Usaco2005 feb]Secret Milking Machine 神秘的挤奶机 裸最大流
1734: [Usaco2005 feb]Aggressive cows 愤怒的牛 二分判定一下
1735: [Usaco2005 jan]Muddy Fields 泥泞的牧场 二分图最小点覆盖。
★1736: [Usaco2005 jan]The Wedding Juicer 婚宴的榨汁机 维护一个优先队列,首先边界的先插入优先队列,让已选点向周围扩展。拿出当前最小的已选点,其高度为h,如果它周围的点高度不够h,那么贡献就是h-a[x][y],然后把这个点当作高度为h的入队,若高度大于h,那就直接入队就好了。重复以上过程。
★1737: [Usaco2005 jan]Naptime 午睡时间 环形dp,不过不能接到后面,这样会超时。先考虑没有环的情况,f[i][j][0/1]表示过去i小时,睡了j小时,第i小时牛是睡还是醒 。
然后有环的话,可以发现当且仅当0和n-1都睡的话才出现环,其本质为0点睡与不睡,于是强制0点睡,然后按上面再转移一遍取最大值就可以了。
★1738: [Usaco2005 mar]Ombrophobic Bovines 发抖的牛 二分然后网络流判定一下,注意建图。
1740: [Usaco2005 mar]Yogurt factory 奶酪工厂 贪心
1741: [Usaco2005 nov]Asteroids 穿越小行星群 裸二分图匹配
1742: [Usaco2005 nov]Grazing on the Run 边跑边吃草 区间dp
★1744: [Usaco2005 oct]Skiing 奶牛滑雪 宽搜一遍,比较神奇
1745: [Usaco2005 oct]Flying Right 飞行航班 维护sgt的最小值
1747: [Usaco2005 open]Expedition 探险 开个优先队列贪一下
1748: [Usaco2005 open]Around the world 环球飞行 spfa加上奇怪的条件搞一搞就好了
★★1749: [usaco2005 open]Landscaping 地形改造 神奇的方法去维护山顶。其实就是找转折点啦。
#include<cstring> #include<cstdio> #include<algorithm> #include<iostream> #include<cmath> #include<queue> #define rep(i,l,r) for (int i=l;i<=r;i++) #define down(i,l,r) for (int i=l;i>=r;i--) #define clr(x,y) memset(x,y,sizeof(x)) #define maxn 50500 #define inf int(1e9) #define mm 10007 #define low(i) (i&(-i)) typedef unsigned long long ll; using namespace std; int a[maxn],m,n; ll read() { ll x=0, f=1; char ch=getchar(); while (!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();} while (isdigit(ch)) x=x*10+ch-'0', ch=getchar(); return x*f; } int main(){ // freopen("in.txt","r",stdin); n=read(); m=read(); rep(i,1,n) a[i]=read(); int ans=0; while (1){ int cnt=0,bs=-1,be=-1,bv=inf,bh=-1,flag=1,s=1; rep(e,1,n) if (e==n||(!flag&&a[e]<a[e+1])){ int nowh=0,nowv=0; if (s!=1) nowh=max(nowh,a[s-1]); if (e!=n) nowh=max(nowh,a[e]); rep(j,s,e) nowv+=max(a[j]-nowh,0); if (nowv<bv) { bs=s; be=e; bh=nowh; bv=nowv; } cnt++; flag=1; s=e+1; } else if (a[e]>a[e+1]) flag=0; if (cnt<=m) break; ans+=bv; rep(i,bs,be) a[i]=min(a[i],bh); } printf("%d\n",ans); return 0; }
1753: [Usaco2005 qua]Who's in the Middle 中位数
1754: [Usaco2005 qua]Bull Math 高精乘
1755: [Usaco2005 qua]Bank Interest 水
△△1770: [Usaco2009 Nov]lights 燈 高斯解xor方程组+爆搜自由元。
★1772: [Usaco2009 Nov]rescue 拯救奶牛貝希 找找规律。。
1774: [Usaco2009 Dec]Toll 过路费 最短路的变种
1775: [Usaco2009 Dec]Vidgame 电视游戏问题 依赖型背包。
1776: [Usaco2010 Hol]cowpol 奶牛政坛 裸个lca
★1777: [Usaco2010 Hol]rocks 石头木头 博弈论nim阶梯,设节点1是第0层的话,偶数层不算因为偶数层转到奇数层我就可以转下去直到1,那么输者依旧gg,赢者肯定不会这么做增加变数,然后对于奇数层,显然一个点的所有后继是x%(l+1),那么我们xor起来就好了。
★1778: [Usaco2010 Hol]Dotp 驱逐猪猡 首先做一个等比数列求和,然后可以构造出矩阵,由于这个矩阵是在分数线下面我们高斯消元求个逆
★1780: [Usaco2010 Feb]corral 覆盖牛棚 把一段区间当作两个事件点,优先队列维护一下每个栅栏下一个应该连接的栅栏,然后枚举起点dfs一遍。
1782: [Usaco2010 Feb]slowdown 慢慢游 裸链剖
1783: [Usaco2010 Jan]Taking Turns dp。 f[i][0/1]表示从第i位取,0是先手取,1是后手取。倒推一遍,有f[i][0]=f[i+1][1]+a[i],f[i][1]=f[i+1][0](这是先手取a[i])的情况,当然他也可以不取a[i],那么这个时候就有f[i][0]=f[i+1][0],f[i][1]=f[i+1][1](跳掉了a[i]这个点),后手没人权。
1785: [Usaco2010 Jan]telephone 贪心,首先能被当前点包就包,不能的话就传上去
1827: [Usaco2010 Mar]gather 奶牛大集会 树形dp,移动一下割点就可以了。。
1828: [Usaco2010 Mar]balloc 农场分配 上个线段树维护下最小值。
★1914: [Usaco2010 OPen]Triangle Counting 数三角形 凸包排序一下,然后扫一遍,记录一下端点计数一下。这是数学题。
★1915: [Usaco2010 Open]奶牛的跳格子游戏 把相邻的格子看成一块,然后优先队列乱搞一下。。
★1916: [Usaco2010 Open]冲浪 一个树形dp,f[u][i]表示当前是在点u,失控了i次,那么它的答案可以由它的孩子转移得到。(其实这是博弈论的最大最小?我怎么感觉是贪心。
2014: [Usaco2010 Feb]Chocolate Buying 贪一遍。
2015: [Usaco2010 Feb]Chocolate Giving 最短路就可以了。
2016: [Usaco2010]Chocolate Eating 二分判定一下就可以了。
2020: [Usaco2010 Jan]Buying Feed, II 扫一遍。
2021: [Usaco2010 Jan]Cheese Towers 维护一个dp。
2023: [Usaco2005 Nov]Ant Counting 数蚂蚁 统计每个家族人的个数然后一个家族一个家族枚举。
★2058: [Usaco2010 Nov]Cow Photographs 因为1是在n的右边所以出现了循环,那么我们可以对原序列求个逆序对然后把1变成n+1,2变成n+2这样下去求逆序对,最小的逆序对就是答案。
★2059: [Usaco2010 Nov]Buying Feed 购买饲料 dp。维护一个堆。
2060: [Usaco2010 Nov]Visiting Cows 拜访奶牛 其实就是个没有上司的舞会,一个树dp
2097: [Usaco2010 Dec]Exercise 奶牛健美操 二分答案然后删边就可以了。
2099: [Usaco2010 Dec]Letter 恐吓信 建出sa之后对sa进行二分
2100: [Usaco2010 Dec]Apple Delivery 最短路
2101: [Usaco2010 Dec]Treasure Chest 藏宝箱 维护一个dp,让自己取最大相当于让对面取最小
2102: [Usaco2010 Dec]The Trough Game 暴力枚举即可。
2196: [Usaco2011 Mar]Brownie Slicing 二分答案然后乱搞
2197: [Usaco2011 Mar]Tree Decoration 一个树形dp
2199: [Usaco2011 Jan]奶牛议会 2sat连边之后枚举YN跑一遍。
2200: [Usaco2011 Jan]道路和航线 似乎开了deque做最短路就可以水过去
2272: [Usaco2011 Feb]Cowlphabet 奶牛文字 可以看出词素构成了一条路,所以我们把边连好后记忆化搜索一遍就可以了。(维护当前剩下多少个小写字母和大写字母
★2274: [Usaco2011 Feb]Generic Cow Protests f[i]=∑f[j](sum[i]>=0&&sum[i]>=sum[j]) 那么把所有的sum离散化然后维护一个树状数组就可以了。
2442: [Usaco2011 Open]修剪草坪 逆向处理维护一个单调队列。
2501: [usaco2010 Oct]Soda Machine 维护前缀和就好了。
★2580: [Usaco2012 Jan]Video Game 构建出ac自动机然后记录下每个点的权,然后暴力dp扫一遍。
★2582: [Usaco2012Jan]Bovine Alliance 做并查集,维护连通块的点数和边数,如果点数=边数,那么只有两种情况,如果点数=边数+1,那么有n种情况。然后乘起来。
★2590: [Usaco2012 Feb]Cow Coupons 先贪心把c最小的k个取下来,然后调整,维护两个堆,一个维护取q与c的差值,另外一个维护q。
2620: [Usaco2012 Mar]Haybale Restacking 对给的数据作差,设为c[i],假设每个点都是从左边的点拿东西,有c[i]+x[i-1]-x[i],x[i]表示i点传递的量。然后取中位数。
2621: [Usaco2012 Mar]Cows in a Skyscraper 搜索。注意一下搜索顺序。
3016: [Usaco2012 Nov]Clumsy Cows 维护个栈。
★3017: [Usaco2012 Nov]Cow Breeds f[j]表示当前未匹配的A串的'('个数为j的方案数,首先我们预处理出k[i]表示当前有k[i]个'('没有被匹配,那么k[i]-j就是B串的个数,然后跑一遍dp就可以啦,一个'('可以加在A串也可以加在B串上,右括号同理。
3018: [Usaco2012 Nov]Distant Pastures 跑一遍最短路。
3048: [Usaco2013 Jan]Cow Lineup 先离散化,扫一遍维护当前选取的点的类数有多少,并更新答案。
Δ1742: [Usaco2005 nov]Grazing on the Run 边跑边吃草 (3074: [Usaco2013 Mar]The Cow Run)两道题是一样的,维护一个区间的dp就可以了。
★3075: [Usaco2013]Necklace 建立ac自动机,然后在上面跑dp
★★3126: [Usaco2013 Open]Photo 找出每个点可以被转移出来的区间记为l[i]和r[i],然后维护一个单调队列。
3296: [USACO2011 Open] Learning Languages 维护一个并查集。
★3297: [USACO2011 Open]forgot 设f[i][j]表示第i个字符能否是第j个单词的开头,然后从后往前做一遍dp,记录下当前点是哪个单词。
★3298: [USACO 2011Open]cow checkers 每一行(列)都会有一个唯一的点是必败点。
3299: [USACO2011 Open]Corn Maze玉米迷宫 最短路。
3300: [USACO2011 Feb]Best Parenthesis 写个栈维护一下就可以了。
Δ3301: [USACO2011 Feb] Cow Line 康托展开。
3310: [Usaco2013 Nov]Empty Stalls 似乎怎么搞都过的了?按题意做就可以辣。
Δ3313: [Usaco2013 Nov]Farmer John has no Large Brown Cow 模拟乱搞。
3314: [Usaco2013 Nov]Crowded Cows 单调栈
★3315: [Usaco2013 Nov]Pogo-Cow 其实可以写一个i,j,k的转移,用f[j][i]表示从j点跳到i点的总收益,正反两遍。从f[j][i]转移到f[i][k],看起来会T?但是j,k至多只有1~n/2,所以是没有问题的。
Δ3365: [Usaco2004 Feb]Distance Statistics 路程统计 点分治。。
3381: [Usaco2004 Open]Cave Cows 2 洞穴里的牛之二 裸rmq
3386: [Usaco2004 Nov]Til the Cows Come Home 带奶牛回家 最短路。
3390: [Usaco2004 Dec]Bad Cowtractors牛的报复 最大生成树
3391: [Usaco2004 Dec]Tree Cutting网络破坏 dfs一遍记录下最大儿子然后就可以更新答案了。
3393: [Usaco2009 Jan]Laserphones 激光通讯 按题意bfs就可以了。
★3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛 设g[i]为<=i的种类数,那么有g[i]=g[i-1]+1(i<=k),g[i]=g[i-1]+g[i-k-1]
3399: [Usaco2009 Mar]Sand Castle城堡 排序然后直接搞
3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队 dp。f[i][j]表示当前搞到第i个点,%为j
3401: [Usaco2009 Mar]Look Up 仰望 单调栈
3402: [Usaco2009 Open]Hide and Seek 捉迷藏 裸bfs
3403: [Usaco2009 Open]Cow Line 直线上的牛 按题意维护一个双端队列
3404: [Usaco2009 Open]Cow Digit Game又见数字游戏 可以把所有的情况都预处理出来,根据必胜态存在下一状态必败,必败态下一状态均必胜,然后0是一个必败态。
★3405: [Usaco2009 Open]Grazing2 移动牛棚 距离是(s-1)/(n-1),也就是说有(s-1)%(n-1)的剩余可以拿来+1-1,然后就可以dp辣,f[i][j]表示当前搞到第i个点,已经用掉j的剩余
3406: [Usaco2009 Oct]Invasion of the Milkweed 乳草的入侵 随便bfs
3407: [Usaco2009 Oct]Bessie's Weight Problem 贝茜的体重问题 裸01背包
3408: [Usaco2009 Oct]Heat Wave 热浪 裸最短路。
3409: [Usaco2009 Oct]Barn Echoes 牛棚回声 hash一遍就好了。
3410: [Usaco2009 Dec]Selfish Grazing 自私的食草者 把区间按左端点从小到大排序,然后维护右端点最大值,贪心取最小的。
★3411: [Usaco2009 Dec]Bobsledding 高山滑雪 可以看出运动的v-t图像是连续的k=1的线段或是k=-1的线段,那么可以用解析几何的方法算出两线段的交点,更新答案。
3412: [Usaco2009 Dec]Music Notes乐谱 裸二分
★3430: [Usaco2014 Jan]Ski Course Rating 把相邻看成连边,按权值从小到大排,然后维护一个并查集,如果两个点的个数加起来是够的但某个点自己的个数不够那么就更新它的答案。
还有就是在find的时候顺便把这个并查集里面的答案都更新一遍。
3431: [Usaco2014 Jan]Bessie Slows Down 模拟一下就好了
3432: [Usaco2014 Jan]Cross Country Skiing 其实二分+bfs就好了
3433: [Usaco2014 Jan]Recording the Moolympics 思路同3410
★3445: [Usaco2014 Feb] Roadblock 枚举每一条从u到v的最短边跑spfa
3449: [Usaco2014 Feb]Secret Code 记忆化搜索
3479: [Usaco2014 Mar]Watering the Fields 其实就是让边权符合条件的连起来跑mst
3480: [Usaco2014 Mar]Mooo 先把背包预处理出来然后扫一遍。
3538: [Usaco2014 Open]Dueling GPS 先把两个最短路网建出来,然后重构图跑最短路。
★3539: [Usaco2014 Open]Odometer 数位dp+组合数学。。
3540: [Usaco2014 Open]Fair Photography 离散化后把0看成-1,然后做一遍前缀和,0和1个数相同就是sum[r]==sum[l-1]
3826: [Usaco2014 Dec]Cow Jog 假设现在有now条跑道,维护每条跑道的限制距离,并更新答案。
3886: [Usaco2015 Jan]Moovie Mooving 状压dp,f[s]表示当前状态为s的最大时间,然后每次就二分找一下第i的最近的可以的时间,然后如果f[s]大于时间限定就更新答案。
★3888: [Usaco2015 Jan]Stampede 首先可以把每个点都抽象成一块板,然后把高度从小到大排,一个一个插入set中。每次就看当前离它最近的板能否覆盖它并更新连接起来的板的长度
3889: [Usaco2015 Jan]Cow Routing 双键值最短路,预处理出代价跑一遍最短路就可以。
★3890: [Usaco2015 Jan]Meeting Time 维护一个小根堆,把边不断地插进去,然后维护一个ans,如果说ans>q.top().t且两个边权都走到n的话,就直接输出答案。否则答案只可能比当前答案还要大。
3891: [Usaco2014 Dec]Piggy Back 做3遍最短路,然后枚举一下相遇点。
3892: [Usaco2014 Dec]Marathon 维护一个n^2的dp
3893: [Usaco2014 Dec]Cow Jog 从后往前扫一遍,更新答案就可以了。
★3940: [Usaco2015 Feb]Censoring 建一棵ac自动机,然后跑一遍,记录下满足条件时的转移。
3942: [Usaco2015 Feb]Censoring 一个一个插入,维护一个hash就可以了(为什么种子取31炸了取29并不会。。
3943: [Usaco2015 Feb]SuperBull 这个mst就可以了
4096: [Usaco2013 dec]Milk Scheduling 维护个堆
4097: [Usaco2013 dec]Vacation Planning n^3裸floyed
4100: [Usaco2015 Open]Bessie Goes Moo 答案是求整除7,所以每个数至多7种可能,那么7^7乱搞一下。
★4101: [Usaco2015 Open]Trapped in the Haybales 因为只能指定一个,所以可以考虑两个方向,比如向左的话它一定是要尽量地向右走再去撞左边的点,于是可以更新答案,向右边走也是如此。
4102: [Usaco2015 Open]Bessie n<=1000,所以预处理出距离然后做个n^2的dp就好了。