最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

CF Lane Switching 參考答案

2022-05-30 14:17 作者:信奧賽USACO鄭老師  | 我要投稿

#include <bits/stdc++.h>

using namespace std;

typedef pair<int,int> PII;


?bool can_pass(PII x,PII y,double limit){

? ? int maxf=max(x.first,y.first);

? ? int mins=min(x.second,y.second);

? ? if(mins-maxf-limit>=0){

? ? ? ? return true;

? ? }else{

? ? ? ? return false;

? ? }? ??

}? ??


bool reachLastLane(int start, vector<vector<int>>& net, int n, map<int, pair<int,int> >& v2p){

? ? stack<int> s;

? ? s.push(start);

? ? vector<bool> vis(n);

? ? while(!s.empty()){

? ? ? ? int a=s.top();

? ? ? ? s.pop();

? ? ? ? for(int v:net[a]){

? ? ? ? ? ? if(!vis[v]){

? ? ? ? ? ? ? ? if(v2p[v].first==n-1){

? ? ? ? ? ? ? ? ? ? return true;

? ? ? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? ? ? vis[v]=true;

? ? ? ? ? ? ? ? ? ? s.push(v);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? }

? ? return false;

}? ??


int main()

{

? ? int n,m,r,acms,acml;

? ? cin>>n>>m>>r;

? ? int lane,len,start ;

? ? cin>>lane>>acml>>acms;

? ? vector< vector< pair<int,int> > > cars(n);

? ? vector< vector< pair<int,int> > > road(n);

? ? vector< vector< int > > p2v(n);

? ? map<int, pair<int,int> > v2p;

? ??

? ? for(int i=1;i<m;i++){

? ? ? ? cin>>lane>>len>>start;

? ? ? ? cars[lane].push_back(make_pair(start,start+len));

? ? }

? ? int vexnum=0;

? ? for(int i=0;i<n;i++){

? ? ? ? sort(cars[i].begin(),cars[i].end());

? ? ? ? int num=cars[i].size();


? ? ? ? if(num>0){

? ? ? ? ? ? road[i].push_back(make_pair(0,cars[i][0].first));

? ? ? ? }else{

? ? ? ? ? ? road[i].push_back(make_pair(0,r));

? ? ? ? }

? ? ? ? p2v[i].push_back(vexnum);

? ? ? ? v2p[vexnum]=make_pair(i,p2v[i].size()-1);

? ? ? ? vexnum++;

? ? ? ? for(int j=1;j<num;j++){

? ? ? ? ? ? road[i].push_back(make_pair(cars[i][j-1].second,cars[i][j].first));

? ? ? ? ? ? p2v[i].push_back(vexnum);

? ? ? ? ? ? v2p[vexnum]=make_pair(i,p2v[i].size()-1);

? ? ? ? ? ? vexnum++;

? ? ? ? }

? ? ? ? if(num>0){

? ? ? ? ? ? road[i].push_back(make_pair(cars[i][num-1].second,r));

? ? ? ? ? ? p2v[i].push_back(vexnum);

? ? ? ? ? ? v2p[vexnum]=make_pair(i,p2v[i].size()-1);

? ? ? ? ? ? vexnum++;

? ? ? ? }? ??

? ? }

? ? //find out start vex

? ? int startv;

? ? auto ip=upper_bound(road[0].begin(),road[0].end(),make_pair(acms,acms+r+1));

? ? ip--;

? ? int index=ip-road[0].begin();

? ? startv=p2v[0][index];

? ? ? ??

? ? double lf=-(double)acml/2, rt=((double)r+1)/2;

? ? while(rt-lf>1e-6){

? ? ? ? vector<vector<int>> net(vexnum);

? ? ? ? double md=(lf+rt)/2;

? ? ? ? double limit=2*md+acml;

? ? ? ? //construct net

? ? ? ? for(int i=0;i<n-1;i++){

? ? ? ? ? ? int k=0,l=0;

? ? ? ? ? ? while(k<road[i].size() && l<road[i+1].size()){

? ? ? ? ? ? ? ? if(can_pass(road[i][k],road[i+1][l],limit)){

? ? ? ? ? ? ? ? ? ? net[p2v[i][k]].push_back(p2v[i+1][l]);

? ? ? ? ? ? ? ? ? ? net[p2v[i+1][l]].push_back(p2v[i][k]);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? if(road[i][k].second>road[i+1][l].second){

? ? ? ? ? ? ? ? ? ? l++;

? ? ? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? ? ? k++;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }? ??

? ? ? ? if(reachLastLane(startv, net, n, v2p)){

? ? ? ? ? ? lf=md;

? ? ? ? }else{

? ? ? ? ? ? rt=md;

? ? ? ? }

? ? }

? ? if(lf>=0){

? ? ? ? printf("%.5f\n",lf);

? ? }else{

? ? ? ? cout<<"Impossible"<<endl;

? ? }? ??

? ? return 0;

}


CF Lane Switching 參考答案的評論 (共 條)

分享到微博請遵守國家法律
淄博市| 巨鹿县| 洞头县| 安远县| 吉林省| 佛山市| 武山县| 利津县| 桃园市| 长岛县| 浦城县| 虹口区| 拉孜县| 佛冈县| 西乌珠穆沁旗| 吴川市| 黄浦区| 桑日县| 芦溪县| 南投市| 井冈山市| 五家渠市| 佛冈县| 石屏县| 兴城市| 合川市| 武清区| 辽中县| 德阳市| 库尔勒市| 渑池县| 绥德县| 潼关县| 阿城市| 寿光市| 克山县| 宁德市| 谷城县| 华蓥市| 都兰县| 阳曲县|