zoukankan      html  css  js  c++  java
  • codeforces 576C Points on Plane 相邻两点的欧拉距离

    题意:给出n个点,要求排序后,相邻两点的欧拉距离之和小于等于2.5e9
    做法:由于0≤ xi, yi ≤ 1e6,所以可以将x<=1000的点分成一份,1000<x<=2000的点分成第二份,以此类推,分成一千份。
    然后每一份中的点都按照y单调排序。拿任意一份点做实验,如果从最小的y开始往上走,那么y的贡献最多1e6,那么一千份就总共最多贡献1e9。

    最后考虑x的贡献,在某一份点中,从一个点走到另一个点最多贡献1e3,那么这份总共最多贡献1e9,也就是所有点都在这一份里面,那么考虑所有点集,那x总共贡献1e9。如果分散在其它点集中,那么总共贡献大概想想也是1e9。加起来是2e9,必然满足要求。

    所以,排个序就可以做了。

    #include<map>
    #include<string>
    #include<cstring>
    #include<cstdio>
    #include<cstdlib>
    #include<cmath>
    #include<queue>
    #include<vector>
    #include<iostream>
    #include<algorithm>
    #include<bitset>
    #include<climits>
    #include<list>
    #include<iomanip>
    #include<stack>
    #include<set>
    using namespace std;
    struct point
    {
        int id,x,y;
        bool operator <(point a)const
        {
            return y<a.y;
        }
    };
    vector<point>bx[1010];
    int main()
    {
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            point t;
            scanf("%d%d",&t.x,&t.y);
            t.id=i;
            bx[t.x/1000].push_back(t);
        }
        bool flag=0;
        for(int i=0;i<=1000;i++)
        {
            sort(bx[i].begin(),bx[i].end());
            if(bx[i].size())
            {
                int len=bx[i].size();
                if(!flag)
                {
                    for(int j=0;j<len;j++)
                        printf("%d ",bx[i][j].id);
                }
                else
                {
                    for(int j=len-1;j>-1;j--)
                        printf("%d ",bx[i][j].id);
                }
                flag^=1;
            }
        }
    }
    View Code
  • 相关阅读:
    ES 入门记录之 match和term查询的区别
    ElasticSearch 学习记录之Text keyword 两种基本类型区别
    ES 记录之如何创建一个索引映射,以及一些设置
    娱乐至死 读书笔记
    ES 入门之一 安装ElasticSearcha
    王二的经济学故事 读书笔记
    redis特性 存储 API 集群 等
    Linux 卸载 openjdk
    Linux 下面解压.tar.gz 和.gz文件解压的方式
    本地连接 vmware服务器
  • 原文地址:https://www.cnblogs.com/Aragaki/p/7074724.html
Copyright © 2011-2022 走看看