zoukankan      html  css  js  c++  java
  • ACM-ICPC 2018 徐州赛区网络预赛 G. Trace

    题意

    后浪推前浪,每个浪是一个矩形,由两条边组成,后形成的浪会把之前浪的边吞掉,问最后剩下的边的总长度。

    思路

    越后生成的浪保留的边越多,所以我们反过来放就保证我们先放的不会被吞,采用集合存放点,每次放新的点的时候查找到他正左端的点和正右端的点,在ans上加上横纵坐标之差就完成了。

    题目保证没有任两个浪相互包含,这使得我们这样的算法总是合理的。

    代码

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef pair<int,int> PII;
     4 const int N=5e4+7;
     5 PII point[N];
     6 int main()
     7 {
     8     set<PII> se;
     9     int n;
    10     scanf("%d",&n);
    11     for(int i=0,a,b;i<n;i++)
    12     {
    13         scanf("%d%d",&a,&b);
    14         point[i] = make_pair(a,b);
    15     }
    16     long long ans=point[n-1].first+point[n-1].second;
    17     se.insert(make_pair(0,1e7+5));
    18     se.insert(make_pair(1e7+5,0));
    19     se.insert(point[n-1]);
    20     for(int i=n-2;i>=0;i--)
    21     {
    22         auto it=se.lower_bound(point[i]);
    23         ans+=point[i].second-it->second;
    24         it--;
    25         ans+=point[i].first-it->first;
    26         se.insert(point[i]);
    27     }
    28     printf("%lld
    ",ans);
    29 }
  • 相关阅读:
    vue后台管理系统项目
    javascript面试题
    webpack学习
    js全局变量收集器
    Koa2框架token验证
    require.js使用
    Koa2中使用art-template模板和静态资源托管
    Koa2POST请求参数
    H5、C3、ES6的新特性
    H5视频播放
  • 原文地址:https://www.cnblogs.com/computer-luo/p/9633255.html
Copyright © 2011-2022 走看看