SSL-ZYC 溜冰
生活随笔
收集整理的這篇文章主要介紹了
SSL-ZYC 溜冰
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目大意:
一個國際溜冰比賽的賽道長L米。在起點選手的速度是1米/秒,但速度是可以改變的,在每一米的速度可以是前一米的速度加1、減1,或者等于前一米的速度。在滑行的過程中,選手會遇到N個轉彎處,第i個轉彎處位于距離出發點D[i]米處。為了安全,選手到達第i個轉彎處的速度不能超過S[i]米/秒。選手到達終點時的速度沒有最大限制。請你幫忙計算選手溜冰過程中最大的速度是多少?
下面的例子,距開始7米處限速為3、11米處限速為1、13米處限速為8,如下圖:
思路:
沒思路。。。。。。
這道題一看就是暴力模擬,分兩種情況:
(1)前一個拐彎點一直上升到下一個拐彎點。
(2)前一個拐彎點先上升后下降到下一個拐彎點。
就可以利用n+2(起點和終點也算)個拐彎點確定答案。
代碼:
#include <cstdio> #include <iostream> using namespace std;int n,m,maxn,x,a[100001],b[100001];void sorts(int l,int r) //快排 {int i=l;int j=r;int z=b[(i+j)/2];do{while (b[i]<z) i++;while (b[j]>z) j--;if (i<=j){swap(a[i],a[j]);swap(b[i],b[j]);i++;j--;} }while(i<=j);if (i<r) sorts(i,r);if (j>l) sorts(l,j); }int main() {freopen("skate.in","r",stdin);freopen("skate.out","w",stdout);scanf("%d%d",&n,&m);for (int i=1;i<=m;i++){scanf("%d%d",&b[i],&a[i]);}sorts(1,m); a[0]=1; b[0]=0; a[m+1]=n+1; b[m+1]=n; //初始化for (int i=m;i>=1;i--) a[i]=min(a[i],a[i+1]+b[i+1]-b[i]); //判斷:若上一個轉彎點一直減速也無法低于下一個轉彎點的速度就更改上一個轉彎點的最大速度for (int i=1;i<=m+1;i++){if (a[i]-a[i-1]>=b[i]-b[i-1]) {if (a[i]>a[i-1]+b[i]-b[i-1]) a[i]=a[i-1]+b[i]-b[i-1]; //一直加速的情況maxn=max(maxn,a[i]);}else {x=(int)(b[i]-b[i-1]+a[i]+a[i-1])/2; //先加速后減速的情況maxn=max(maxn,x); }}printf("%d\n",maxn);return 0; }轉載于:https://www.cnblogs.com/hello-tomorrow/p/9313120.html
總結
以上是生活随笔為你收集整理的SSL-ZYC 溜冰的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bzoj 4319 cerc2008 S
- 下一篇: 影视感悟