奶牛跑步2

哦! 哦!     2022-08-27     303

关键词:

 

P1443 - USACO】奶牛跑步2

Description

FJ的N(1 <= N <= 100,000)头奶牛们又兴高采烈地出来运动了!她们在一条无限长的小路上跑步,每头牛起跑的位置都不同,速度也不尽相同。
道路中划出了若干条跑道,以便她们能快速"超车",同一跑道中的任意两头牛都不会出现在相同的位置。不过FJ不愿让任何一头牛更换跑道或者调整速度,他想知道如果让牛们跑足T(1 <= T <= 1,000,000,000)分钟的话,至少需要多少条跑道才能满足需要。

Input

第一行有两个数,N和T;
接下来有N行,每一行两个数,表示一头牛的位置和速度,其中位置是一个非负整数,速度为一个正整数,均不超过10^9。所有牛的开始位置均不相同,因此N头牛的数据将以位置升序的方式给出。

Output

输出为一个整数,表示所需跑道的最小数目,要保证同一跑道中的任意两头牛在T时限内(到第T分钟结束)不会撞到一起。

Sample Input

5 3
0 1
1 2
2 3
3 2
6 1

Sample Output

3

Hint

 

Source

USACO
基本 ,平衡树

 

首先得到一个式子,xi+vi*T < xj+vj*T,若j与i满足这个条件,则j可以放在i后面,与i用一个跑道,意思是i无论如何都无法再T时间内追上j。但有很多个点满足,因为把j放入跑道之后,这条跑道的条件就要用j的信息来判断了,所以要使损失最小,则应该把j放到所有满足条件的值最大的那个后面,所以此时应该贪心一个一个的加入,用平衡树来实现查找,然后删除这个前驱,加入这个点。若没有前驱则表示没有满足条件的,需增加一个跑道,此时ans++;

 

  1 #include<map>
  2 #include<set>
  3 #include<cmath>
  4 #include<ctime>
  5 #include<queue>
  6 #include<stack>
  7 #include<cstdio>
  8 #include<vector>
  9 #include<cstdlib>
 10 #include<cstring>
 11 #include<iomanip>
 12 #include<iostream>
 13 #include<algorithm>
 14 #define ll long long
 15 #define rep(i,a,b) for(register int i=a;i<=b;i++)
 16 #define re register
 17 #define il inline
 18 using namespace std;
 19 const int N=100010;
 20 int pre[N],cnt[N],ch[N][2],n,root,tot;
 21 ll key[N],T;
 22 il ll gl() {
 23     ll ret=0;char ch=getchar();
 24     while(ch<0||ch>9) ch=getchar();
 25     while(ch>=0&&ch<=9) ret=ret*10+ch-0,ch=getchar();
 26     return ret;
 27 }
 28 il int getx(int x) {return ch[pre[x]][1] == x;}
 29 il void Newnode(int fa,ll v) {
 30     ++tot;
 31     pre[tot]=fa , cnt[tot]=1;
 32     key[tot]=v;
 33 }
 34 il void Rotate(int x) {
 35     int old=pre[x],oldx=pre[old],bj=getx(x);
 36     ch[old][bj]=ch[x][!bj];pre[ch[old][bj]]=old;
 37     ch[x][!bj]=old;pre[old]=x;
 38     pre[x]=oldx;
 39      if(oldx) ch[oldx][ch[oldx][1]==old]=x;
 40 }
 41 il void Splay(int x,int goal) {
 42     while(pre[x]!=goal) {
 43         if(pre[pre[x]]==goal) Rotate(x);
 44         else {
 45             int no=getx(x),od=getx(pre[x]);
 46             if(no==od) Rotate(pre[x]),Rotate(x);
 47             else Rotate(x),Rotate(x);
 48         }
 49     }
 50     if(goal==0) root=x;// bug
 51 }
 52 il void Insert(ll v) {
 53     if(root==0) {
 54         Newnode(0,v);root=tot;return;
 55     }
 56     int now=root,fa=0;
 57     while(1) {
 58         if(key[now]==v) {
 59             cnt[now]++;Splay(now,0);return;
 60         }
 61         fa=now;
 62         now=ch[now][v > key[now]];
 63         if(now==0) {
 64             Newnode(fa,v);
 65             ch[fa][v > key[fa]] = tot;
 66             Splay(tot,0);
 67             return;
 68         }
 69     }
 70 }
 71 il int get_pre() {
 72     int now=ch[root][0];
 73     while(ch[now][1]) now=ch[now][1];
 74     return now;
 75 }
 76 il void del(int x) {
 77     if(root==0) return;
 78     Splay(x,0);
 79     if(cnt[x]>1) {cnt[x]--;return;}
 80     if(!ch[x][0]&&!ch[x][1]) {
 81         root=0;return;
 82     }
 83     if(!ch[x][0]) {
 84         root=ch[x][1];pre[root]=0;
 85         return;
 86     }
 87     else if(!ch[x][1]) {
 88         root=ch[x][0];pre[root]=0;
 89         return;
 90     }
 91     int l=get_pre();
 92     Splay(l,0);//
 93     ch[root][1]=ch[x][1];
 94     pre[ch[x][1]]=root;// bug
 95     ch[x][1]=ch[x][0]=cnt[x]=0;// 
 96     return;
 97 }
 98 int find(ll k) {//  找到 <= k 的最大数 
 99     int ret=-1,now=root;
100     while(now) {
101         if(key[now] < k) ret=now,now=ch[now][1];
102         else now=ch[now][0];
103     }
104     return ret;
105 }
106 int main() {
107     scanf("%d",&n);T=gl();
108     re ll x,v,S;
109     int ans=0;
110     rep(i,1,n) {
111         x=gl(),v=gl(),S=x+v*T;
112         int cur=find(S);
113         if(cur==-1) ans++;
114         else del(cur);
115         Insert(S);
116     }
117     cout<<ans;
118     return 0;
119 }

 

cogs1945.奶牛跑步

...对比时间限制:1s  内存限制:256MB【题目描述】奶牛们又兴高采烈地出去运动了!一共有N(1<=N<=100,000)头牛在一条无限长的单向羊肠小道上慢跑。每头牛在小道上的起点都不同,牛儿们的速度也不尽相同。这条羊肠小... 查看详情

dp专题

一、奶牛的锻炼(exer.c/.cpp/.pas)Description:奶牛Bessie有N分钟时间跑步,每分钟她可以跑步或者休息。若她在第i分钟跑步,可以跑出D_i米,同时疲倦程度增加1(初始为0)。若她在第i分钟休息,则疲倦程度减少1。无论何时,疲倦程度... 查看详情

18.12.20poj3661跑步(代码片段)

描述奶牛们打算通过锻炼来培养自己的运动细胞,作为其中的一员,贝茜选择的运动方式是每天进行N(1<=N<=10,000)分钟的晨跑。在每分钟的开始,贝茜会选择下一分钟是用来跑步还是休息。贝茜的体力限制了她跑步的距离。更... 查看详情

[dp]tvvj1023奶牛的锻炼

思考首先鄙人在这个题目上面思考的状态方程是dp[i][1]表示第i分钟能跑的情况下最大路程dp[i][0]表示第i分钟不能跑情况下的最大路程。但是在思考片刻之后发现有疲劳度的限制,所以这个方程没有办法产生联系。在思考许久无果... 查看详情

笔试算法题目,奶牛排队喝水

题目:题目描述 有N(1≤N≤1000)头奶牛,它们都被标上一个优先等级编号:1,2或3。用来表示它们喝水时的优先次序,编号为l的最优先,编号为2的其次,编号为3的最后。每天奶牛开始时排成一行,但总是很乱,需要你把它们... 查看详情

bzoj2199[usaco2011jan]奶牛议会2-sat

【BZOJ2199】[Usaco2011Jan]奶牛议会Description由于对FarmerJohn的领导感到极其不悦,奶牛们退出了农场,组建了奶牛议会。议会以“每头牛都可以获得自己想要的”为原则,建立了下面的投票系统:M只到场的奶牛(1<=M<=4000)会... 查看详情

排序奶牛的编号(代码片段)

题目描述有N(1≤N≤1000)头奶牛,它们都被标上一个优先等级编号:1,2或3。用来表示它们喝水时的优先次序,编号为l的最优先,编号为2的其次,编号为3的最后。每天奶牛开始时排成一行,但总是很乱,需要你把它们重新排成... 查看详情

跑步书籍推荐---跑步指南

1.跑步指南跑步指南 著出版社:机械工业出版社出版时间:2015-08-01ISBN:9787111514084这本书个人推荐,图文讲解,非常适合入门,很不错的书籍  2.不跑会死:中国跑步指南宋歌编著北京:煤炭工业出版社出版时间:2014-07-... 查看详情

奶牛渡河——线性dp(代码片段)

奶牛渡河——线性dp题目描述FarmerJohn以及他的N(1<=N<=2,500)头奶牛打算过一条河,但他们所有的渡河工具,仅仅是一个木筏。由于奶牛不会划船,在整个渡河过程中,FJ必须始终在木筏上。在这个基础上,木筏上的奶牛数目每... 查看详情

bzoj2199/usaco2011jan奶牛议会——2-sat

Description由于对FarmerJohn的领导感到极其不悦,奶牛们退出了农场,组建了奶牛议会。议会以“每头牛都可以获得自己想要的”为原则,建立了下面的投票系统:M只到场的奶牛(1<=M<=4000)会给N个议案投票(1<=N<=1,000)。... 查看详情

bzoj1613贝茜的晨练计划(代码片段)

Description奶牛们打算通过锻炼来培养自己的运动细胞,作为其中的一员,贝茜选择的运动方式是每天进行N(1<=N<=10,000)分钟的晨跑。在每分钟的开始,贝茜会选择下一分钟是用来跑步还是休息。贝茜的体力限制了她跑步的距离... 查看详情

poj3180奶牛舞会

题目大意:  约翰的N(2≤N≤10000)只奶牛非常兴奋,因为这是舞会之夜!她们穿上礼服和新鞋子,别上鲜花,她们要表演圆舞。  只有奶牛才能表演这种圆舞.圆舞需要一些绳索和一个圆形的水池.奶牛们围在池边站好,顺... 查看详情

记忆化搜索游荡的奶牛

[luogu1535]游荡的奶牛题目描述Searchingfortheverybestgrass,thecowsaretravellingaboutthepasturewhichisrepresentedasagridwithNrowsandMcolumns(2<=N<=100;2<=M<=100).KeenobserverFarmerJohnhasrecordedBess 查看详情

2020.07.16模拟2(代码片段)

A.Layout题目描述和人类一样,奶牛们在打饭的时候喜欢和朋友站得很近。约翰的编号为1到n的n只奶牛正打算排队打饭。现在请你来安排她们,让她们在数轴上排好队。奶牛的弹性很好,同一个坐标可以站无限只奶牛,排队的顺序... 查看详情

奶牛排序——rmq(代码片段)

【问题描述】奶牛在熊大妈的带领下排成了一条直队。显然,不同的奶牛身高不一定相同……现在,奶牛们想知道,如果找出一些连续的奶牛,要求最左边的奶牛A是最矮的,最右边的B是最高的,且B高于A奶牛,且中间如果存在... 查看详情

洛谷p1535游荡的奶牛(代码片段)

P1535游荡的奶牛题目描述Searchingfortheverybestgrass,thecowsaretravellingaboutthepasturewhichisrepresentedasagridwithNrowsandMcolumns(2<=N<=100;2<=M<=100).KeenobserverFarmerJohnhasrecordedBessie‘spo 查看详情

p2837晚餐队列安排

...背景UsacoFeb08Bronze题目描述为了避免餐厅过分拥挤,FJ要求奶牛们分2批就餐。每天晚饭前,奶牛们都会在餐厅前排队入内,按FJ的设想,所有第2批就餐的奶牛排在队尾,队伍的前半部分则由设定为第1批就餐的奶牛占据。由于奶牛... 查看详情

题解幸运奶牛(代码片段)

题目描述    有N头奶牛从左往右排成一行,编号是1至N。如果某头奶牛的编号是2的倍数或者是3的倍数,那么这头奶牛就是幸运奶牛。这N头奶牛中,总共有多少头奶牛是幸运奶牛? 输入输出格式输入格式 &nb... 查看详情