zoukankan      html  css  js  c++  java
  • CF #327 DIV2 D、E

    两题都不难。

    对于D题,可以使用相对移动,把吹aircraft移动变成相反方向的待援点的移动。假设此时时间为t,把aircraft的速度设为Vmax,看待援点在飞船最大速度飞行t秒的范围内,注意风向变化的时间点即可。其实很明显的二分。。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 
     6 using namespace std;
     7 int x1,y1,x2,y2;
     8 double v,t;
     9 int fx,fy,sx,sy;
    10 
    11 double dis(double x,double y){
    12     return x*x+y*y;
    13 }
    14 
    15 bool ok(double st){
    16     if(st<=t){
    17         if(dis(x2-fx*st-x1,y2-fy*st-y1)-v*st*v*st>1e-8) return false;
    18         else return true;
    19     }
    20     else{
    21         st-=t;
    22         if(dis(x2-fx*t-sx*st-x1,y2-fy*t-sy*st-y1)-v*v*(st+t)*(st+t)>1e-8) return false;
    23         return true;
    24     }
    25 }
    26 
    27 int main(){
    28     while(scanf("%d%d%d%d",&x1,&y1,&x2,&y2)!=EOF){
    29         scanf("%lf%lf",&v,&t);
    30         scanf("%d%d%d%d",&fx,&fy,&sx,&sy);
    31         double l=0,r=1e9;
    32         double ans=0;
    33         while(r-l>1e-8){
    34             double m=(r+l)/2;
    35             if(ok(m)){
    36                 ans=m;
    37                 r=m;
    38             }
    39             else{
    40                 l=m;
    41             }
    42         }
    43         printf("%.8lf
    ",ans);
    44     }
    45     return 0;
    46 }
    View Code

    对于E题,我觉得我是傻B了。可以求出每个国家到其他国家的最近距离,当然了,此时使用BFS,求出每个点到从本国的边缘点出发的最近距离。

    首先假设交接点在某个国家,这样求三次都取最近距离。

    再假设交接点在空白的点上,取某点到三个国家最近的距离和。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 #include <queue>
     6 
     7 using namespace std;
     8 
     9 char str[1005][1005];
    10 int n,m;
    11 int dis[4][1005][1005];
    12 
    13 struct Node{
    14     int x,y;
    15     Node(){}
    16     Node(int xx,int yy){
    17         x=xx,y=yy;
    18     }
    19 };
    20 
    21 int dir[4][2]={
    22     {0,1},
    23     {1,0},
    24     {-1,0},
    25     {0,-1}
    26 };
    27 
    28 int p[4];
    29 
    30 bool ok(int x,int y){
    31     if(x<1||x>n||y<1||y>m) return false;
    32     return true;
    33 }
    34 
    35 void slove(int ind){
    36     queue<Node>que;
    37     for(int i=1;i<=n;i++){
    38         for(int j=1;j<=m;j++){
    39             if(str[i][j]=='0'+ind)
    40                 que.push(Node(i,j)),dis[ind][i][j]=0,p[ind]=0;
    41         }
    42     }
    43     Node tmp,nxt;
    44     while(!que.empty()){
    45         tmp=que.front();
    46         que.pop();
    47         for(int k=0;k<4;k++){
    48             nxt.x=tmp.x+dir[k][0];
    49             nxt.y=tmp.y+dir[k][1];
    50             if(!ok(nxt.x,nxt.y)) continue;
    51             if(dis[ind][nxt.x][nxt.y]!=-1) continue;
    52             if(str[nxt.x][nxt.y]=='#') continue;
    53             dis[ind][nxt.x][nxt.y]=dis[ind][tmp.x][tmp.y]+1;
    54             if(str[nxt.x][nxt.y]>='1'&&str[nxt.x][nxt.y]<='3'){
    55                 if(str[nxt.x][nxt.y]=='1'&&p[1]==-1) p[1]=dis[ind][nxt.x][nxt.y];
    56                 if(str[nxt.x][nxt.y]=='2'&&p[2]==-1) p[2]=dis[ind][nxt.x][nxt.y];
    57                 if(str[nxt.x][nxt.y]=='3'&&p[3]==-1) p[3]=dis[ind][nxt.x][nxt.y];
    58             }
    59             que.push(Node(nxt.x,nxt.y));
    60         }
    61     }
    62 }
    63 
    64 int main(){
    65     while(scanf("%d%d",&n,&m)!=EOF){
    66         for(int i=1;i<=n;i++){
    67             scanf("%s",str[i]+1);
    68         }
    69         int ans=-1;
    70         memset(dis[1],-1,sizeof(dis[1]));
    71         memset(p,-1,sizeof(p));
    72         slove(1);
    73         if(p[1]!=-1&&p[2]!=-1&&p[3]!=-1) ans=ans==-1?p[1]+p[2]+p[3]-2:min(ans,p[1]+p[2]+p[3]-2);
    74         memset(dis[2],-1,sizeof(dis[2]));
    75         memset(p,-1,sizeof(p));
    76         slove(2);
    77         if(p[1]!=-1&&p[2]!=-1&&p[3]!=-1) ans=ans==-1?p[1]+p[2]+p[3]-2:min(ans,p[1]+p[2]+p[3]-2);
    78         memset(dis[3],-1,sizeof(dis[3]));
    79         memset(p,-1,sizeof(p));
    80         slove(3);
    81         if(p[1]!=-1&&p[2]!=-1&&p[3]!=-1) ans=ans==-1?p[1]+p[2]+p[3]-2:min(ans,p[1]+p[2]+p[3]-2);
    82         for(int i=1;i<=n;i++){
    83             for(int j=1;j<=m;j++){
    84                 if(dis[1][i][j]==-1) continue;
    85                 if(dis[2][i][j]==-1) continue;
    86                 if(dis[3][i][j]==-1) continue;
    87                 ans=ans==-1?dis[1][i][j]+dis[2][i][j]+dis[3][i][j]-2:min(ans,dis[1][i][j]+dis[2][i][j]+dis[3][i][j]-2);
    88             }
    89         }
    90         printf("%d
    ",ans);
    91         
    92     }
    93     return 0;
    94 }
    View Code
  • 相关阅读:
    Miox带你走进动态路由的世界——51信用卡前端团队
    从零开始搭建Vue组件库 VV-UI
    你不知的DOM编程
    浅谈前后端分离与实践(一)
    处理 Vue 单页面应用 SEO 的另一种思路
    Vue服务端渲染和Vue浏览器端渲染的性能对比
    实例PK(Vue服务端渲染 VS Vue浏览器端渲染)
    使用ES6+Vue+webpack+gulp构建新一代Web应用
    耐克的定制页用canvas如何实现....跪求前端大神指点。
    Unity热更新学习(二) —— ToLua c#与lua的相互调用
  • 原文地址:https://www.cnblogs.com/jie-dcai/p/4924464.html
Copyright © 2011-2022 走看看