UVA 11627 Slalom(二分)
生活随笔
收集整理的這篇文章主要介紹了
UVA 11627 Slalom(二分)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
二分,判斷的時候,一個點一個點的考慮肯定是不行啦,考慮的單位是一個區(qū)間,
每次左端點盡量向左邊移動,右端點盡量向右,得到下次可以達(dá)到的范圍,檢查一下和下一個區(qū)間有沒有交集。
#include<bits/stdc++.h> using namespace std; const int maxn = 1e5+5, maxns = 1e6+5; double x[maxn],y[maxn]; double W,vh; int N; int S[maxns]; bool ok(int s) {double lm = x[0], rm = x[0]+W;for(int i = 1;i < N; i++){double t = (y[i]-y[i-1])/s;lm -= t*vh; rm += t*vh;if(rm < x[i] || lm > x[i]+W) return false;lm = max(lm,x[i]); rm = min(rm,x[i]+W);}return true; }int main() {//freopen("in.txt","r",stdin);int T; scanf("%d",&T);while(T--){scanf("%lf%lf%d",&W,&vh,&N);for(int i = 0; i < N; i++) scanf("%lf%lf",x+i,y+i);int ns; scanf("%d",&ns);for(int i = 0; i < ns; i++) scanf("%d",S+i);sort(S,S+ns);if(!ok(S[0])) { puts("IMPOSSIBLE") ;continue;}int l = 0, r = ns-1, m;for(;S[l]<S[r]; ok(S[m])?l=m:r=m-1 ) m = (l+r+1)>>1;printf("%d\n",S[l]);}return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/jerryRey/p/4809996.html
總結(jié)
以上是生活随笔為你收集整理的UVA 11627 Slalom(二分)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL Server镜像自动生成脚本
- 下一篇: H5进阶篇--实现微信摇一摇功能