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

相关文章: