zoukankan      html  css  js  c++  java
  • 微软大楼设计方案(中等)(2017 计蒜之道 初赛 第六场)

    题目链接:https://nanti.jisuanke.com/t/15772

    如果查两个核心部门的最短距离m,需要一下步骤

    • 首先需要两个核心部门所在大楼之间的最低楼高S是多少

    • 然后在算出两个核心部门所在大楼的最低楼层T是多少

    • 然后就可以分为两种情况来讨论了

      1: S > T, 那么m为两个核心部门所在大楼的楼距加上两个核心部门的层距。

      2:S <= T, 那么m为两个核心部门所在大楼的楼距加上两个核心部门楼层到S的距离

    可以线段树算出任意两个大楼之间的最低楼高。

    代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    
    struct node
    {
        int l, r;
        int x;
    };
    const int N = 200007;
    node arr[N << 2];
    int x[N], y[N];
    
    void build(int l, int r, int k)
    {
        arr[k].l = l, arr[k].r = r;
        if(l == r)
        {
            scanf("%d", &arr[k].x);
            return;
        }
        int mid = (l+r) >> 1;
        build(l, mid, k<<1);
        build(mid+1, r, k<<1|1);
        arr[k].x = min(arr[k<<1].x, arr[k<<1|1].x);
    }
    
    int query(int l, int r, int k)
    {
        if(arr[k].l >= l && arr[k].r <= r)
            return arr[k].x;
    
        int res = 40;
        if(arr[k<<1].r >= l)
            res = min(res, query(l, r, k<<1));
        if(arr[k<<1|1].l <= r)
            res = min(res, query(l, r, k<<1|1));
        return res;
    }
    
    int main()
    {
        int n, k;
        scanf("%d%d", &n, &k);
        build(1, n, 1);
    
        int m;
        scanf("%d", &m);
        for(int i=1; i<=m; ++ i)
            scanf("%d%d", &x[i], &y[i]);
    
        int ans = 0;
        for(int i=1; i<m; ++ i)
        {
            for(int j=i+1; j<=m; ++ j)
            {
                int mn = query(min(x[i], x[j]), max(x[i], x[j]), 1);
                mn = min(mn, min(y[i], y[j]));
                int tmp = abs(y[i]-mn) + abs(y[j]-mn) + abs(x[i]-x[j]);
                ans += (tmp <= k);
            }
        }
        printf("%d
    ", ans);
        return 0;
    }
    
  • 相关阅读:
    05-----数据类型转换
    04-----赋值运算符
    03-----数据类型
    02-----第一个JavaScript代码
    Fxx and game
    Bomb
    Stammering Aliens
    DISUBSTR
    Life Forms
    后缀数组二·重复旋律2
  • 原文地址:https://www.cnblogs.com/aiterator/p/6944847.html
Copyright © 2011-2022 走看看