WorldFinal11 (2/11)
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.11)SQL优化——mysql提示(hint)
		
(1.11)mysql hint 关键词:mysql提示 1.SQL提示 (hint)是优化数据库的手段之一,使用它加入一些人为的提示来达到优化操作的目的: 举例: select sql_buffer ...
 - 常量表达式和constexpr(c++11)
		
常量表达式 常量表达式是指值不会改变且在编译阶段就能得到计算结果的表达式(两点要求) ; //是常量表达式 ; //是常量表达式 "; const int siz=s.size(); //不 ...
 - (3.11)mysql基础深入——mysql文件分类与配置文件管理
		
(3.11)mysql基础深入——mysql文件分类与管理 关键词:mysql配置文件,mysql参数文件,mysql中的my.cnf 目录:mysql数据库文件分类: [1]参数文件:my.cnf ...
 - Django 2.0.1 官方文档翻译:编写你的第一个 Django app,第六部分(Page 11)
		
编写你的第一个 Django app,第六部分(Page 11)转载请注明链接地址 本教程上接前面第五部分的教程.我们构建了一个经过测试的 web-poll应用,现在我们会添加一个样式表和一张图片. ...
 - (2.11)Mysql之SQL基础——存储过程与变量
		
(2.11)Mysql之SQL基础——存储过程 关键字:mysql存储过程 查看存储过程: []SELECT * FROM information_schema.ROUTINES WHERE ROUT ...
 - SQL Server安全(10/11):行级别安全(Row-Level Security)
		
在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切.但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念.这篇文章提供了基础,因此你可以对SQL Se ...
 - SQL Server安全(5/11):架构与安全(Schemas and Security)
		
在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切.但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念.这篇文章提供了基础,因此你可以对SQL Se ...
 - 12天学好C语言——记录我的C语言学习之路(Day 11)
		
12天学好C语言--记录我的C语言学习之路 Day 11: 因为指针部分比较的难,所以我们花费的时间也是最长的,希望大家耐的住性子,多多理解,多多打代码.好了,废话不多说,来看第11天的学习. //编 ...
 - 你好,C++(11)如何用string数据类型表示一串文字?根据初始值自动推断数据类型的auto关键字(C++ 11)
		
3.5.2 字符串类型 使用char类型的变量我们可以表示单个字符,那么,我们又该如何表示拥有多个字符的字符串呢? 我们注意到,一个字符串是由多个字符串连起来形成的.很自然地,一种最简单直接的方法就 ...
 
随机推荐
- CSS那些事!这个篇幅是我特意开的,不是因为帮助小菜之类的,而是在多人的团队配合中各种命名冲突的规范让人蛋疼
			
CSS那些事!这个篇幅是我特意开的,不是因为帮助小菜之类的,而是在多人的团队配合中各种命名冲突的规范让人蛋疼. css这个东西只要不是新的离谱都会写,但是每个人的命名风格,方法,都不同 有人喜欢驼峰, ...
 - 关于Web安全的那些事(XSS攻击)
			
概述 XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列表,然后向联系人发 ...
 - unp学习笔记——Chapter1
			
1.发现网络拓扑的几个重要的命令 (1).netstat -i 提供网络接口的信息.我们还指定-n 标志以输出数值地址,而不是试图把它们反向解析成名字.netstat -r 展示路由表. dzhwen ...
 - FFT(Rock Paper Scissors Gym - 101667H)
			
题目链接:https://vjudge.net/problem/Gym-101667H 题目大意:首先给你两个字符串,R代表石头,P代表布,S代表剪刀,第一个字符串代表第一个人每一次出的类型,第二个字 ...
 - Struts2不扫描jar包中的action
			
今天在做一个二开的项目,将struts打成jar包放在WEB-INF的目录下却扫描不到指定的路径,也就是http访问访问不到我们指定的action,其他代码可以正常使用,就是访问不到action.st ...
 - 2017/05/21  java 基础  随笔
			
工具类:所有的方法都是静态的,如果一个类中所有的方法都是静态的,需要再多做一步,私有构造方法,不让其他类创建本类对象. 生成文档: java.lang 包不用导入 常见代码块的应用 * a:局部 ...
 - ubuntu16.04 caffe(GPU模式)安装
			
历时5天终于完成了,配置中出现了各种各样的Error,这里记录一下,希望能为正在安装的人提供一点帮助. 配置中主要参考博客:http://blog.csdn.net/yhaolpz/article/d ...
 - JS脚本病毒调试脚本-Trojan[Downloader]:JS/Nemucod
			
1.前言 遇到Trojan[Downloader]:JS/Nemucod需要分析,这款病毒主要为js运行.从网上各种找js调试方法.发现52的帖子还挺沾边的. TrojanDownloader:JS/ ...
 - linux使用badblocks命令扫描硬盘排除故障(待验证)
			
检查硬盘是否产生坏道并输出# badblocks -s -v -o /root/badblocks.log /dev/sda //公司操作 -s Show the p ...
 - 基于Apache在本地配置多个虚拟主机站点
			
简单的说,打开httpd.conf 在最后加入如下内容: <VirtualHost 127.0.0.2:80> DocumentRoot d:/AppServ/www2 Ser ...