CF #327 DIV2 D、E
两题都不难。
对于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的更多相关文章
- 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, ...
- CF#581 (div2)题解
CF#581 题解 A BowWow and the Timetable 如果不是4幂次方直接看位数除以二向上取整,否则再减一 #include<iostream> #include< ...
- [CF#286 Div2 D]Mr. Kitayuta's Technology(结论题)
题目:http://codeforces.com/contest/505/problem/D 题目大意:就是给你一个n个点的图,然后你要在图中加入尽量少的有向边,满足所有要求(x,y),即从x可以走到 ...
- CF 192 Div2
A.Cakeminator 暴搞之,从没有草莓覆盖的行.列遍历 char map[30][30]; int vis[30][30]; int hang[30],lie[30]; int main() ...
- codeforces round #257 div2 C、D
本来应该认真做这场的.思路都是正确的. C题,是先该横切完或竖切完,无法满足刀数要求.再考虑横切+竖切(竖切+横切), 由于横切+竖切(或竖切+横切)会对分割的东西产生交叉份数.从而最小的部分不会尽可 ...
- Codeforces Round #327 (Div2) A~E
CodeForces 591A 题意:在距离为L的两端A,B,相向发射魔法,a(以P1的速度)-->B,A<--b(以P2的速度).假设a-->B,途中相遇,则返回到原点A<- ...
- CF#603 Div2
差不多半年没打cf,还是一样的菜:不过也没什么,当时是激情,现在已是兴趣了,开心就好. A Sweet Problem 思维,公式推一下过了 B PIN Codes 队友字符串取余过了,结果今天早上一 ...
- CF R631 div2 1330 E Drazil Likes Heap
LINK:Drazil Likes Heap 那天打CF的时候 开场A读不懂题 B码了30min才过(当时我怀疑B我写的过于繁琐了. C比B简单多了 随便yy了一个构造发现是对的.D也超级简单 dp了 ...
- CF 197 DIV2 Xenia and Bit Operations 线段树
线段树!!1A 代码如下: #include<iostream> #include<cstdio> #define lson i<<1 #define rson i ...
随机推荐
- java 锁机制(synchronized 与 Lock)
在java中,解决同步问题,很多时候都会使用到synchronized和Lock,这两者都是在多线程并发时候常使用的锁机制. synchronized是java中的一个关键字,也就是说是java内置的 ...
- 5CSS之字体font-family
---------------------------------------------------------------------------------------------------- ...
- Log4J2的 PatternLayout
Log4J2 PatternLayout 参考 日志样例 : 2018-10-21 07:30:05,184 INFO - DeviceChannelServiceImpl.java:434[defa ...
- Laravel5.1学习笔记17 数据库3 数据迁移
介绍 建立迁移文件 迁移文件结构 执行迁移 回滚迁移 填写迁移文件 创建表 重命名/ 删除表 创建字段 修改字段 删除字段 建立索引 删除索引 外键约束 #介绍 Migrations are lik ...
- asp.net——根据时间,显示内容
题目: 在VS 2010中建立一个网站,命名为Lab5_1,建立时注意项目文件夹的存放位置.根据当前时间,在页面上显示早上好或下午好或晚上好,并显示相应的不同图片. 体验: 一开始看到这个题目的时候, ...
- Android基础TOP4_1:点击物理按钮弹出退出提示框
JAVA: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedIns ...
- JS——offset
1.offsetWidth.offsetHeight返回盒子宽度和高度,包括padding与border,不包括margin 2.offsetLeft.offsetTop返回盒子距离定位盒子的x轴方向 ...
- java攻城狮之路--复习JDBC(利用BeanUtils、JDBC元数据编写通用的查询方法;元数据;Blob;事务;批量处理)
1.利用BeanUtils的前提得要加入以下两个jar包: commons-beanutils-1.8.0.jar commons-logging-1.1.1.jar package com.shel ...
- easyui 使用笔记
http://www.easyui.info/archives/1435.html datagrid 服务端分页 服务端分页,高效,快捷!强力推荐! easyui的datagrid服务端分页,通过设置 ...
- 类QQ账号生成阐述
具体需求如下: 数字账号从60000到9999999999(类似qq号一样的东东) 用户获取数字账号为随机分配,也可递加分配,需要符合如下规则 特殊账号需要保留,不能分配给用户,比如:112233(连 ...