两题都不难。

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

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std;
int x1,y1,x2,y2;
double v,t;
int fx,fy,sx,sy; double dis(double x,double y){
return x*x+y*y;
} bool ok(double st){
if(st<=t){
if(dis(x2-fx*st-x1,y2-fy*st-y1)-v*st*v*st>1e-) return false;
else return true;
}
else{
st-=t;
if(dis(x2-fx*t-sx*st-x1,y2-fy*t-sy*st-y1)-v*v*(st+t)*(st+t)>1e-) return false;
return true;
}
} int main(){
while(scanf("%d%d%d%d",&x1,&y1,&x2,&y2)!=EOF){
scanf("%lf%lf",&v,&t);
scanf("%d%d%d%d",&fx,&fy,&sx,&sy);
double l=,r=1e9;
double ans=;
while(r-l>1e-){
double m=(r+l)/;
if(ok(m)){
ans=m;
r=m;
}
else{
l=m;
}
}
printf("%.8lf\n",ans);
}
return ;
}

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

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

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

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue> using namespace std; char str[][];
int n,m;
int dis[][][]; struct Node{
int x,y;
Node(){}
Node(int xx,int yy){
x=xx,y=yy;
}
}; int dir[][]={
{,},
{,},
{-,},
{,-}
}; int p[]; bool ok(int x,int y){
if(x<||x>n||y<||y>m) return false;
return true;
} void slove(int ind){
queue<Node>que;
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
if(str[i][j]==''+ind)
que.push(Node(i,j)),dis[ind][i][j]=,p[ind]=;
}
}
Node tmp,nxt;
while(!que.empty()){
tmp=que.front();
que.pop();
for(int k=;k<;k++){
nxt.x=tmp.x+dir[k][];
nxt.y=tmp.y+dir[k][];
if(!ok(nxt.x,nxt.y)) continue;
if(dis[ind][nxt.x][nxt.y]!=-) continue;
if(str[nxt.x][nxt.y]=='#') continue;
dis[ind][nxt.x][nxt.y]=dis[ind][tmp.x][tmp.y]+;
if(str[nxt.x][nxt.y]>=''&&str[nxt.x][nxt.y]<=''){
if(str[nxt.x][nxt.y]==''&&p[]==-) p[]=dis[ind][nxt.x][nxt.y];
if(str[nxt.x][nxt.y]==''&&p[]==-) p[]=dis[ind][nxt.x][nxt.y];
if(str[nxt.x][nxt.y]==''&&p[]==-) p[]=dis[ind][nxt.x][nxt.y];
}
que.push(Node(nxt.x,nxt.y));
}
}
} int main(){
while(scanf("%d%d",&n,&m)!=EOF){
for(int i=;i<=n;i++){
scanf("%s",str[i]+);
}
int ans=-;
memset(dis[],-,sizeof(dis[]));
memset(p,-,sizeof(p));
slove();
if(p[]!=-&&p[]!=-&&p[]!=-) ans=ans==-?p[]+p[]+p[]-:min(ans,p[]+p[]+p[]-);
memset(dis[],-,sizeof(dis[]));
memset(p,-,sizeof(p));
slove();
if(p[]!=-&&p[]!=-&&p[]!=-) ans=ans==-?p[]+p[]+p[]-:min(ans,p[]+p[]+p[]-);
memset(dis[],-,sizeof(dis[]));
memset(p,-,sizeof(p));
slove();
if(p[]!=-&&p[]!=-&&p[]!=-) ans=ans==-?p[]+p[]+p[]-:min(ans,p[]+p[]+p[]-);
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
if(dis[][i][j]==-) continue;
if(dis[][i][j]==-) continue;
if(dis[][i][j]==-) continue;
ans=ans==-?dis[][i][j]+dis[][i][j]+dis[][i][j]-:min(ans,dis[][i][j]+dis[][i][j]+dis[][i][j]-);
}
}
printf("%d\n",ans); }
return ;
}

CF #327 DIV2 D、E的更多相关文章

  1. cf 442 div2 F. Ann and Books(莫队算法)

    cf 442 div2 F. Ann and Books(莫队算法) 题意: \(给出n和k,和a_i,sum_i表示前i个数的和,有q个查询[l,r]\) 每次查询区间\([l,r]内有多少对(i, ...

  2. CF#581 (div2)题解

    CF#581 题解 A BowWow and the Timetable 如果不是4幂次方直接看位数除以二向上取整,否则再减一 #include<iostream> #include< ...

  3. [CF#286 Div2 D]Mr. Kitayuta's Technology(结论题)

    题目:http://codeforces.com/contest/505/problem/D 题目大意:就是给你一个n个点的图,然后你要在图中加入尽量少的有向边,满足所有要求(x,y),即从x可以走到 ...

  4. CF 192 Div2

    A.Cakeminator 暴搞之,从没有草莓覆盖的行.列遍历 char map[30][30]; int vis[30][30]; int hang[30],lie[30]; int main() ...

  5. codeforces round #257 div2 C、D

    本来应该认真做这场的.思路都是正确的. C题,是先该横切完或竖切完,无法满足刀数要求.再考虑横切+竖切(竖切+横切), 由于横切+竖切(或竖切+横切)会对分割的东西产生交叉份数.从而最小的部分不会尽可 ...

  6. Codeforces Round #327 (Div2) A~E

    CodeForces 591A 题意:在距离为L的两端A,B,相向发射魔法,a(以P1的速度)-->B,A<--b(以P2的速度).假设a-->B,途中相遇,则返回到原点A<- ...

  7. CF#603 Div2

    差不多半年没打cf,还是一样的菜:不过也没什么,当时是激情,现在已是兴趣了,开心就好. A Sweet Problem 思维,公式推一下过了 B PIN Codes 队友字符串取余过了,结果今天早上一 ...

  8. CF R631 div2 1330 E Drazil Likes Heap

    LINK:Drazil Likes Heap 那天打CF的时候 开场A读不懂题 B码了30min才过(当时我怀疑B我写的过于繁琐了. C比B简单多了 随便yy了一个构造发现是对的.D也超级简单 dp了 ...

  9. CF 197 DIV2 Xenia and Bit Operations 线段树

    线段树!!1A 代码如下: #include<iostream> #include<cstdio> #define lson i<<1 #define rson i ...

随机推荐

  1. Git 迁库 标签

    Git迁库 (一)克隆裸库 git clone --bare https://github.com/SunArmy/Tourist.git 克隆之后进入该目录下是这样的 (二)创建新的版本库 这里我已 ...

  2. 像素缓冲区对象PBO 记录

    像素缓冲区对象PBO 记录 和所有的缓冲区对象一样,它们都存储在GPU内存中,我们可以访问和填充PBO,方法和其他的缓冲区一样. 当一个PBO被绑定到GL_PIXEL_PACK_BUFFER,任何读取 ...

  3. python自动化测试学习笔记-1

    一.什么是自动化 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程.直白的就是为了节省人力.时间或硬件资源,提高测试效率,便引入了通过软件或程序自动化执行测试用例进行测试: 二.python ...

  4. EF--ModelFirst

    EF框架有三种基本的方式:DB First,Model First,Code First.这里简单的说一下Model First,适合没有基础的同学照着做,学习基础的东西. 1.建立一个类库项目,这个 ...

  5. mysql索引初认识

    mysql> use mysql; Database changed mysql> show index from user; +-------+------------+-------- ...

  6. php域名授权实现方法

    php域名授权实现方法 域名授权的目的:维护知识产权. php实现域名授权有很多方法,比如: 1.本地验证法. 2.在线验证法. 不管是那种方法,其实原理都是一样的. 今天我就举一个本地验证的例子! ...

  7. 《Java编程的逻辑》第一部分 编程基础与二进制

  8. seam remote 返回的map结构

    map结构的数据,js接收到的结构是elements下面的一个 [ {key:***,value:***}, {key:***,value:***} ] 这样子的集合,需要经过下面代码的转换才能重新变 ...

  9. 删除Git服务器文件但是保留本地文件

    参考: https://blog.csdn.net/u012804886/article/details/83059315 https://www.cnblogs.com/wfsovereign/p/ ...

  10. 如何让 HTML 识别 string 里的 '\n' 并成功换行

    只要在结果所在的 div 的 css 设置: white-space: pre-line; 然后页面就能成功识别 '\n' 并整齐的显示结果了.