BZOJ3410: [Usaco2009 Dec]Selfish Grazing 自私的食草者

3410: [Usaco2009 Dec]Selfish Grazing 自私的食草者

Time Limit: 3 Sec  Memory Limit: 128 MB
Submit: 47  Solved: 40
[Submit][Status]

Description

约翰有N(1≤N≤50000)头牛,约翰的草地可以认为是一条直线.每只牛只喜欢在某个特定的范围内吃草.第i头牛喜欢在区间(Si,Ei)吃草,1≤Si<Ei≤1,000,000,00.

奶牛们都很自私,他们不喜欢和其他奶牛共享自己喜欢吃草的领域,因此约翰要保证任意

两头牛都不会共享他们喜欢吃草昀领域.如果奶牛i和奶牛J想要同时吃草,那么要满足:Si>=Ej或者Ei≤Sj.约翰想知道在同一时刻,最多可以有多少头奶牛同时吃草?

Input

第1行:一个整数N.

第2到N+1行:第i+l行有两个整数Si,Ei.

Output

一个整数,最多可以有多少头牛同时吃草.

Sample Input

5
2 4
1 12
4 5
7 10
7 8

Sample Output

3

HINT

第1,3,4共3只奶牛可以同时吃草,第1,3,5也可以.

Source

Silver

题解:

这种选线段的问题一般都是按左端点或右端点排序之后贪心即可。

代码:

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<algorithm>
 6 #include<iostream>
 7 #include<vector>
 8 #include<map>
 9 #include<set>
10 #include<queue>
11 #include<string>
12 #define inf 1000000000
13 #define maxn 50000+5
14 #define maxm 500+100
15 #define eps 1e-10
16 #define ll long long
17 #define pa pair<int,int>
18 #define for0(i,n) for(int i=0;i<=(n);i++)
19 #define for1(i,n) for(int i=1;i<=(n);i++)
20 #define for2(i,x,y) for(int i=(x);i<=(y);i++)
21 #define for3(i,x,y) for(int i=(x);i>=(y);i--)
22 #define mod 1000000007
23 using namespace std;
24 inline int read()
25 {
26     int x=0,f=1;char ch=getchar();
27     while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
28     while(ch>=‘0‘&&ch<=‘9‘){x=10*x+ch-‘0‘;ch=getchar();}
29     return x*f;
30 }
31 int now,n,ans;
32 struct rec{int x,y;}a[maxn];
33 inline bool cmp(rec a,rec b)
34 {
35     return a.y<b.y;
36 }
37 int main()
38 {
39     freopen("input.txt","r",stdin);
40     freopen("output.txt","w",stdout);
41     n=read();
42     for1(i,n)a[i].x=read(),a[i].y=read();
43     sort(a+1,a+n+1,cmp);
44     now=1;
45     for1(i,n)if(a[i].x>=now)ans++,now=a[i].y;
46     printf("%d\n",ans);
47     return 0;
48 }

时间: 2024-10-11 07:37:47

BZOJ3410: [Usaco2009 Dec]Selfish Grazing 自私的食草者的相关文章

3410: [Usaco2009 Dec]Selfish Grazing 自私的食草者

3410: [Usaco2009 Dec]Selfish Grazing 自私的食草者 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 71  Solved: 62[Submit][Status][Discuss] Description 约翰有N(1≤N≤50000)头牛,约翰的草地可以认为是一条直线.每只牛只喜欢在某个特定的范围内吃草.第i头牛喜欢在区间(Si,Ei)吃草,1≤Si<Ei≤1,000,000,00. 奶牛们都很自私,他们不喜欢和其

【贪心大水题】BZOJ3410-[Usaco2009 Dec]Selfish Grazing 自私的食草者

[题目大意] 给出n个区间,问最多选取多少个区间使得它们互相不重叠. [思路] 水题quq改善心情用.按照右端点大小排序,每次更新上一次的右端点,如果当前左端点大于上次右端点可取. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 const int MAXN=50000+50; 7 struct

1774: [Usaco2009 Dec]Toll 过路费

1774: [Usaco2009 Dec]Toll 过路费 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 263  Solved: 154[Submit][Status][Discuss] Description 跟所有人一样,农夫约翰以着宁教我负天下牛,休叫天下牛负我的伟大精神,日日夜夜苦思生 财之道.为了发财,他设置了一系列的规章制度,使得任何一只奶牛在农场中的道路行走,都 要向农夫约翰上交过路费. 农场中由N(1 <= N <= 250)片

【BZOJ 1774】 [Usaco2009 Dec]Toll 过路费

1774: [Usaco2009 Dec]Toll 过路费 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 266 Solved: 157 [Submit][Status][Discuss] Description 跟所有人一样,农夫约翰以着宁教我负天下牛,休叫天下牛负我的伟大精神,日日夜夜苦思生 财之道.为了发财,他设置了一系列的规章制度,使得任何一只奶牛在农场中的道路行走,都 要向农夫约翰上交过路费. 农场中由N(1 <= N <= 250)片

BZOJ3412: [Usaco2009 Dec]Music Notes乐谱

3412: [Usaco2009 Dec]Music Notes乐谱 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 35  Solved: 30[Submit][Status] Description Input 第1行:两个整数N,Q. 第2到N+1行:第i+l行只有一个整数Bi. 第N+2到N+Q+I行:第N+i+l行只有一个整数Ti. Output 第1到Q行:对与每个询问,在词问的时间内,奶牛敲击的是哪个音阶? Sample Input 3

[bzoj1775][Usaco2009 Dec]Vidgame 电视游戏问题_背包dp

1775: [Usaco2009 Dec]Vidgame 电视游戏问题 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1775 题解: 发现是个$zz$分组背包. 但是,正常的分组背包是,完全背包+01背包,在这里根本行不通因为数据范围. 故此我们考虑背包$dp$. 状态:$f_{(i,j)}$表示前$i$组,$i$选,花费$j$的最大价值:$g_{(i,j)}$表示$i$不选. 因为空间开的下,所以我们可以把$i$也放进去. 不然$

bzoj 1774: [Usaco2009 Dec]Toll 过路费 ——(改)floyd

Description 跟所有人一样,农夫约翰以着宁教我负天下牛,休叫天下牛负我的伟大精神,日日夜夜苦思生 财之道.为了发财,他设置了一系列的规章制度,使得任何一只奶牛在农场中的道路行走,都 要向农夫约翰上交过路费. 农场中由N(1 <= N <= 250)片草地(标号为1到N),并且有M(1 <= M <= 10000)条 双向道路连接草地A_j和B_j(1 <= A_j <= N; 1 <= B_j <= N).奶牛们从任意一片草 地出发可以抵达任意一片

BZOJ_1774_[Usaco2009 Dec]Toll 过路费_floyd

题意: 跟所有人一样,农夫约翰以着宁教我负天下牛,休叫天下牛负我的伟大精神,日日夜夜苦思生 财之道.为了发财,他设置了一系列的规章制度,使得任何一只奶牛在农场中的道路行走,都 要向农夫约翰上交过路费. 农场中由N(1 <= N <= 250)片草地(标号为1到N),并且有M(1 <= M <= 10000)条 双向道路连接草地A_j和B_j(1 <= A_j <= N; 1 <= B_j <= N). 奶牛们从任意一片草 地出发可以抵达任意一片的草地.FJ已

[bzoj1774] [Usaco2009 Dec]Toll 过路费

Floyd神用法...设dis[i][j]表示i点到j点的最短路(只算边权),map[i][j]表示i到j最小费用 将n个点先按照点权排一下序...这样就可以比较方便的求出路径上最大点权了... 因为floyd会枚举到路径上的所有节点(当然也包括最短路径外的= =)所以每次找到松弛节点就尝试着更新一下map(最短路不一定费用最少). 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #includ