zoukankan      html  css  js  c++  java
  • Trace 2018徐州赛区网络预赛

    题意:

      每次给出一个点,然后就会形成两条线,如果后面的矩形覆盖了前面的边,那么这条边就消失了, 最后求剩下的边是多少

      题目确保不会完全覆盖 也没有一个矩形在另一个矩形里面

    即对于 X1,Y1  X2,Y2

    如果X1 > X2 则 Y1 < Y2  

    如果X1 < X2 则 Y1 > Y2

    这样才会保证不会出现包含的情况

    解析:

      分别求x 和 y

     我们只看x就好了

      从后往前 用set维护  对于v[i] 如果set里存在比v[i]小的数  则说明在加入这个矩形后加入的矩形 会覆盖这个矩形x长度的一部分 所以在加这条边的长度的时候 我们要减去被覆盖的长度 就是从set里找到与当前v[i]最接近 且 小于当前v[i]的值

    如果都比当前v[i]大 说明不被覆盖

    注意lower_bound返回时 如果set里都比当前v[i]小  则返回end()

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    vector<int> v1;
    vector<int> v2;
    
    LL solve(vector<int> v)
    {
        LL res = 0;
        set<int> s;
        int len = v.size();
        for(int i=len-1; i>=0; i--)
        {
            set<int>::iterator it = s.lower_bound(v[i]);
            if(it == s.begin())
            {
                res += v[i];
            }
            else
            {
                it--;
                res += v[i] - *it;
            }
            s.insert(v[i]);
        }
        return res;
    }
    
    int main()
    {
        int n, x, y;
        while(cin>> n)
        {
            v1.clear(), v2.clear();
            for(int i=0; i<n; i++)
            {
                cin>> x >> y;
                v1.push_back(x);
                v2.push_back(y);
            }
            cout<< solve(v1) + solve(v2) <<endl;
        }
    
    
        return 0;
    }
    自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
  • 相关阅读:
    SelectionKey理解
    redis3.0.3集群搭建
    Centos6.5环境下安装SVN 整合Apache+SSL
    没有注册类 。已加载,但找不到入口点 DllRegisterServer
    今日立秋
    35+开启忙而有序的日子
    jmeter的常用函数
    jmeter之java请求
    生成Webservice客户端的4种方法
    Pytest高级进阶之Fixture
  • 原文地址:https://www.cnblogs.com/WTSRUVF/p/9615189.html
Copyright © 2011-2022 走看看