WorldFinal 11

Trash Removal

题意

给你一个多边形,问这个多边形至少需要多宽的长度,才能把这个多边形放进去。

数据范围100

题解

数据范围只有100,暴力枚举两点,然后算最小距离就好了

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+7;
const double eps = 1e-6;
int cnt=0;
struct node{
double x,y;
}p[105];
double sqr(double x)
{
return x*x;
}
double dis(node a,node b)
{
return sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
}
node operator - (node a,node b)
{
node ret;
ret.x=a.x-b.x;
ret.y=a.y-b.y;
return ret;
}
double operator * (node a,node b)
{
return a.x*b.x+a.y*b.y;
}
double operator ^ (node a,node b)
{
return a.x*b.y-b.x*a.y;
}
double distoline(node a,node b,node c)//a到bc的有向距离
{
double l1=fabs((a-b)*(c-b))/dis(b,c);
return sqrt(sqr(dis(a,b))-l1*l1);
}
int main()
{
int n;
while(cin>>n)
{
if(n==0)break;
for(int i=1;i<=n;i++)
scanf("%lf%lf",&p[i].x,&p[i].y);
double ans = 1e9;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==j)continue;
int flag = 0;
for(int k=1;k<=n;k++){
if(k==i||k==j)continue;
if(((p[k]-p[i])^(p[j]-p[i]))<0.000){
flag=1;
break;
}
}
if(flag)continue;
double d = 0;
for(int k=1;k<=n;k++){
if(k==i||k==j)continue;
d=max(d,distoline(p[k],p[i],p[j]));
}
ans=min(ans,d);
}
}
int Ans = (int)(ans*100+0.99999999999);
printf("Case %d: %.2f\n",++cnt,Ans/(100.0));
}
}

Mummy Madness

题意

二维平面有n<100000个僵尸,还有你。

你一开始在(0,0)位置,僵尸在(x,y),(x,y<=1e5)位置。

僵尸会抓你,你负责逃跑。

这是一个8连通的二维平面,僵尸和你,每一秒都跑一个格子,问你最迟什么时候被抓住,如果不能,输出never。

题解

显然二分,二分答案之后,我能够走的位置是一个正方形,僵尸也是正方形。

通过扫描线维护,看看我所走的正方形,是否完全被僵尸覆盖就好了。

(hdu给的五秒把我卡死了。。。UVA给的20秒)

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e6+7;
inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
struct node
{
int l,r;
int lazy,Min;
void update(int x)
{
lazy+=x;
Min+=x;
}
}tree[maxn*4];
void build(int x,int l,int r)
{
tree[x].l=l,tree[x].r=r;
tree[x].Min=tree[x].lazy=0;
if(l==r)return;
int mid=(l+r)/2;
build(x<<1,l,mid);
build(x<<1|1,mid+1,r);
}
void push_down(int x)
{
int lazyval=tree[x].lazy;
if(lazyval){
tree[x<<1].update(lazyval);
tree[x<<1|1].update(lazyval);
}
tree[x].lazy=0;
}
void push_up(int x)
{
tree[x].Min=min(tree[x<<1].Min,tree[x<<1|1].Min);
}
void update(int x,int l,int r,int val)
{
if(r<l)return;
int L=tree[x].l,R=tree[x].r;
if(l<=L&&R<=r)
tree[x].update(val);
else{
push_down(x);
int mid=(L+R)/2;
if(mid>=l)update(x<<1,l,r,val);
if(mid<r)update(x<<1|1,l,r,val);
push_up(x);
}
}
int query(int x,int l,int r)
{
if(r<l)return 0;
int L=tree[x].l,R=tree[x].r;
if(l<=L&&R<=r)return tree[x].Min;
push_down(x);
int res=1e9;
int mid=(L+R)/2;
if(mid>=l)res=min(res,query(x<<1,l,r));
if(mid<r)res=min(res,query(x<<1|1,l,r));
return res;
}
int n;
int x[maxn],y[maxn];
struct Li
{
int a[maxn];
int tot=0;
void clear(){
tot=0;
}
void push_back(int x){
a[++tot]=x;
}
void Sort(){
sort(a+1,a+1+tot);
int j=1;
for(int i=2;i<=tot;i++)
if(a[i]!=a[i-1])
a[++j]=a[i];
tot=j;
}
int getid(int x)
{
int l=1,r=tot,ans=1;
while(l<=r)
{
int mid=(l+r)/2;
if(a[mid]<=x)l=mid+1,ans=mid;
else r=mid-1;
}
return ans;
}
int size()
{
return tot;
}
}V;
vector<int>q;
vector<pair<pair<int,int>,pair<int,int> > >ask;
bool check(int dis)
{
V.clear();q.clear();
V.push_back(-dis),V.push_back(dis+1);ask.clear();
for(int i=1;i<=n;i++)
V.push_back(y[i]-dis);
for(int i=1;i<=n;i++)
V.push_back(y[i]+dis+1);
V.Sort();
for(int i=1;i<=n;i++)
{
ask.push_back(make_pair(make_pair(x[i]-dis,1),make_pair(y[i]-dis,y[i]+dis+1)));
ask.push_back(make_pair(make_pair(x[i]+dis+1,-1),make_pair(y[i]-dis,y[i]+dis+1)));
}
for(int i=1;i<=n;i++){
if(x[i]-dis>=-dis&&x[i]-dis<=dis)q.push_back(x[i]-dis);
if(x[i]+dis+1>=-dis&&x[i]+dis+1<=dis)q.push_back(x[i]+dis+1);
}
q.push_back(-dis);
sort(ask.begin(),ask.end());
sort(q.begin(),q.end());
q.erase(unique(q.begin(),q.end()),q.end());
build(1,1,V.size()+5);
int now=0;
for(int i=0;i<q.size();i++){
while(now<ask.size()&&ask[now].first.first<=q[i]){
int l=V.getid(ask[now].second.first);
int r=V.getid(ask[now].second.second)-1;
update(1,l,r,ask[now].first.second);
now++;
}
if(q[i]<=dis&&q[i]>=-dis)
if(query(1,V.getid(-dis),V.getid(dis+1)-1)==0)
return true;
}
return false;
}
int main()
{
int cas=0;
while(scanf("%d",&n)!=EOF)
{
if(n==-1)break;
for(int i=1;i<=n;i++)
x[i]=read(),y[i]=read();
int l=1,r=1e6+7,ans=1e6+7;
while(l<=r)
{
int mid=(l+r)/2;
if(check(mid))l=mid+1;
else r=mid-1,ans=mid;
}
if(ans>1e6){
printf("Case %d: never\n",++cas);
}else{
printf("Case %d: %d\n",++cas,ans);
}
}
}

WorldFinal11 (2/11)的更多相关文章

  1. (1.11)SQL优化——mysql提示(hint)

    (1.11)mysql hint 关键词:mysql提示 1.SQL提示 (hint)是优化数据库的手段之一,使用它加入一些人为的提示来达到优化操作的目的: 举例: select sql_buffer ...

  2. 常量表达式和constexpr(c++11)

    常量表达式 常量表达式是指值不会改变且在编译阶段就能得到计算结果的表达式(两点要求) ; //是常量表达式 ; //是常量表达式 "; const int siz=s.size(); //不 ...

  3. (3.11)mysql基础深入——mysql文件分类与配置文件管理

    (3.11)mysql基础深入——mysql文件分类与管理 关键词:mysql配置文件,mysql参数文件,mysql中的my.cnf 目录:mysql数据库文件分类: [1]参数文件:my.cnf ...

  4. Django 2.0.1 官方文档翻译:编写你的第一个 Django app,第六部分(Page 11)

    编写你的第一个 Django app,第六部分(Page 11)转载请注明链接地址 本教程上接前面第五部分的教程.我们构建了一个经过测试的 web-poll应用,现在我们会添加一个样式表和一张图片. ...

  5. (2.11)Mysql之SQL基础——存储过程与变量

    (2.11)Mysql之SQL基础——存储过程 关键字:mysql存储过程 查看存储过程: []SELECT * FROM information_schema.ROUTINES WHERE ROUT ...

  6. SQL Server安全(10/11):行级别安全(Row-Level Security)

    在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切.但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念.这篇文章提供了基础,因此你可以对SQL Se ...

  7. SQL Server安全(5/11):架构与安全(Schemas and Security)

    在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切.但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念.这篇文章提供了基础,因此你可以对SQL Se ...

  8. 12天学好C语言——记录我的C语言学习之路(Day 11)

    12天学好C语言--记录我的C语言学习之路 Day 11: 因为指针部分比较的难,所以我们花费的时间也是最长的,希望大家耐的住性子,多多理解,多多打代码.好了,废话不多说,来看第11天的学习. //编 ...

  9. 你好,C++(11)如何用string数据类型表示一串文字?根据初始值自动推断数据类型的auto关键字(C++ 11)

    3.5.2  字符串类型 使用char类型的变量我们可以表示单个字符,那么,我们又该如何表示拥有多个字符的字符串呢? 我们注意到,一个字符串是由多个字符串连起来形成的.很自然地,一种最简单直接的方法就 ...

随机推荐

  1. bzoj千题计划176:bzoj1199: [HNOI2005]汤姆的游戏

    http://www.lydsy.com/JudgeOnline/problem.php?id=1199 求出圆x的范围 把要判断的点按x从小到大排序 枚举图形 二分出x满足这个图形的一段区间 枚举这 ...

  2. [BZOJ 2257][JSOI2009]瓶子和燃料 题解(GCD)

    [BZOJ 2257][JSOI2009]瓶子和燃料 Description jyy就一直想着尽快回地球,可惜他飞船的燃料不够了. 有一天他又去向火星人要燃料,这次火星人答应了,要jyy用飞船上的瓶子 ...

  3. springboot整合rabbitmq客户端连接报超时异常问题解决:An unexpected connection driver error occured java.net.SocketException: Socket Closed,java.util.concurrent.TimeoutException

    我用的是springboot2.0.6版本,对应的ampq也是2.0.6版本,然后启动一直报: 还有java.util.concurrent.TimeoutException, 用户授权什么的都对,很 ...

  4. SANS社区帐号邮件激活问题

    注册时,密码需要数字,大写字母,小写字母,符号10位以上才能注册成功    吐槽:谁来爆破一下这种强度的密码,哈哈. 在我的文章中,有 计算机取证 分类,里面的一篇文章 Virtual Worksta ...

  5. 公共语言运行库(CLR)开发系列课程(3):COM Interop基础 学习笔记

    上章地址 什么是COM Component Object Model 组建对象模型 基于接口(Interface) 接口=协议 IID 标识接口 V-table 虚表 方式调用 单继承 对象(Obje ...

  6. Docker手动搭建sentry错误日志系统

    Sentry介绍 在开发过程中,我们通过debug来排查bug,并且使用logging来记录系统的错误.但是logging有很多不足: 必须登陆到服务器查看日志文件 需要主动去查询 输出日志方式无法把 ...

  7. asp.net防SQL/JS注入攻击:过滤标记

    /// <summary>/// 过滤标记/// </summary>/// <param name="NoHTML">包括HTML,脚本,数据 ...

  8. list 复制

    a=[1,2,3] b=a #b值改变,a也会改变 b[0]=90 print(a) [90,2,3] b=list(a) #这样修改b,a的值就不会改变

  9. mysql存储表情字符

    windows下是my.inilinux下是my.cnf 路径是: /etc/my.cnf 参考: https://blog.csdn.net/fhzaitian/article/details/53 ...

  10. Android Service总结06 之AIDL

    Android Service总结06 之AIDL 版本 版本说明 发布时间 发布人 V1.0 初始版本 2013-04-03 Skywang           1 AIDL介绍 AIDL,即And ...