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 ...
随机推荐
- easyui DatagrId 的实例讲解
下面是代码实现 @{ ViewBag.Title = "人员查找"; ViewBag.LeftWidth = "200px"; ViewBag ...
- BZOJ 1845 Simpson积分
思路: Simpson积分直接上 限制一下递归深度+精度就好了 (难以理解为什么这么多人写扫描线) //By SiriusRen #include <bits/stdc++.h> usi ...
- 题解报告:hdu 1846 Brave Game(巴什博弈)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1846 Problem Description 十年前读大学的时候,中国每年都要从国外引进一些电影大片, ...
- 新认知之WinForm窗体程序
Windows应用程序和控制台应用程序有很大的区别 >Form1.cs :窗体文件,程序员对窗体编写的代码一般都存放在这个文件中. >Form1.Designer.cs :窗体设计文件, ...
- CF126B Password
思路: kmp略作修改. 实现: #include <iostream> #include <cstdio> using namespace std; ; int neXt[M ...
- 【年终糖果计划】跟风领一波糖果 candy.one 领取教程
糖果领取网址(较为稳定):https://candy.one/i/1474564 用微信和QQ打开的朋友请复制到其他浏览器打开 糖果领取网址(较为稳定):https://candy.one/i/147 ...
- Kotlin实例----android5.0新特性之palette
一.Palette的使用 使用Palette可以让我们从一张图片中拾取颜色,将拾取到的颜色赋予ActionBar,StatusBar以及UI背景色可以让界面色调实现统一或者加载不同图片时同步变化色调 ...
- JS高级——缓存原理
缓存的原理 1.就是将常用的数据存储起来,提供便利,减少查询次数和所消耗的事件 2.利用作用的原理所产生的数据库:非关系型数据库(内存型数据库) MongoDB.Redis等 3.还有网站静态页面缓存 ...
- java web项目和java项目的区别(看清IDE本质)
想必大家在使用MyEclipse时对这两个概念不去深究.只知道是Java EE类的基本都是Web项目,而Java应用程序就是Java项目.而且很多人都愿意使用MyEclipse作为开发工具,且不说大家 ...
- GNSS数据下载网站
Bernese 数据表文件下载 rinex文件下载 ftp://nfs.kasi.re.kr DCB.ION文件ftp://ftp.unibe.ch/AIUB/CODE/ 下载5.0更新文件 ftp: ...