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; }