网站建设seo 视频,网络推广的主要内容,企业形象墙效果设计图,北京最新发布信息题目大意#xff1a; 一个国际溜冰比赛的赛道长L米。在起点选手的速度是1米/秒#xff0c;但速度是可以改变的#xff0c;在每一米的速度可以是前一米的速度加1、减1#xff0c;或者等于前一米的速度。在滑行的过程中#xff0c;选手会遇到N个转弯处#xff0c;第i个转弯… 题目大意 一个国际溜冰比赛的赛道长L米。在起点选手的速度是1米/秒但速度是可以改变的在每一米的速度可以是前一米的速度加1、减1或者等于前一米的速度。在滑行的过程中选手会遇到N个转弯处第i个转弯处位于距离出发点D[i]米处。为了安全选手到达第i个转弯处的速度不能超过S[i]米/秒。选手到达终点时的速度没有最大限制。请你帮忙计算选手溜冰过程中最大的速度是多少 下面的例子距开始7米处限速为3、11米处限速为1、13米处限速为8如下图 思路 没思路。。。。。。 这道题一看就是暴力模拟分两种情况 1前一个拐弯点一直上升到下一个拐弯点。 2前一个拐弯点先上升后下降到下一个拐弯点。 就可以利用n2(起点和终点也算)个拐弯点确定答案。 代码 #include cstdio
#include iostream
using namespace std;int n,m,maxn,x,a[100001],b[100001];void sorts(int l,int r) //快排
{int il;int jr;int zb[(ij)/2];do{while (b[i]z) i;while (b[j]z) j--;if (ij){swap(a[i],a[j]);swap(b[i],b[j]);i;j--;} }while(ij);if (ir) sorts(i,r);if (jl) sorts(l,j);
}int main()
{freopen(skate.in,r,stdin);freopen(skate.out,w,stdout);scanf(%d%d,n,m);for (int i1;im;i){scanf(%d%d,b[i],a[i]);}sorts(1,m); a[0]1; b[0]0; a[m1]n1; b[m1]n; //初始化for (int im;i1;i--) a[i]min(a[i],a[i1]b[i1]-b[i]); //判断若上一个转弯点一直减速也无法低于下一个转弯点的速度就更改上一个转弯点的最大速度for (int i1;im1;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]; //一直加速的情况maxnmax(maxn,a[i]);}else {x(int)(b[i]-b[i-1]a[i]a[i-1])/2; //先加速后减速的情况maxnmax(maxn,x); }}printf(%d\n,maxn);return 0;
} 转载于:https://www.cnblogs.com/hello-tomorrow/p/9313120.html