**360 笔试 登山者行走步数

360 笔试 登山者的步数

分析代码如下:

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int n = 100;

typedef struct Mountains
{
    int begin;
    int end;
    int height;
    /*bool operator <(const struct Mountains& other) const
    {
        return begin < other.begin;
    }
    */
}M;
M num[n];

//对应的结构体是按照 节点的end进行排序 升序 如果是相同的end情况下,则按照节点的begin排序
bool cmp(M a,M b)
{
    if(a.end != b.end)
        return a.end < b.end;
    else
        return a.begin < b.begin;
}

int slove()
{
    int sum;
    cin >> sum;
    //输入
    for(int i=0;i<sum;i++)
    {
        cin >> num[i].begin >> num[i].end >> num[i].height;
    }
    //排序
    sort(num,num+sum,cmp);

    int k = 0;// 标记 求解断点 就是没有重合山的断点
    int flag[n];//断点的位置
    //A 作为起始点 也是一个断点 即 flag[0] = 0;
    memset(flag,0,sizeof(flag));

    int minn = 0x3f3f3f3f,cnt;

    //将重合部分时 那个begin的最小值记录 就是如果有多处重叠 选择起始begin最小的点
    for(int i=0;i<sum;i++)
    {
        if(minn>num[i].begin)
        {
            cnt = i;
            minn = num[i].begin;
        }
    }
    //选择断点的位置
    for(int i=cnt;i<sum-1;i++)
    {
        //存在着缝隙 即为断点
        if(num[i].end < num[i+1].begin)
        {
            flag[k++] = i;
        }
    }

    //末尾节点也是断点
    flag[k++] = sum-1;
    int maxx = 0,ans = 0;

    int offest = num[sum-1].end; // 横坐标的位移 不变

    for(int i=0;i<sum;i++)
    {
        //在断点外面 就是有重合的部分 取最高的height即可
        maxx = max(maxx,num[i].height);
        if(i==flag[ans])
        {
            //断点也即区间 每个区间的求解 vertical_offest
            offest += 2*maxx;
            maxx = 0;
            ans++;
        }
    }

    cout << offest << endl;
    return offest;
}
int main()
{
    slove();
    cout << "Hello world!" << endl;
    return 0;
}
时间: 2024-11-05 21:35:34

**360 笔试 登山者行走步数的相关文章

360笔试-关于手表指针

关于手表指针的算法思考 我们都知道手表上又时分秒三个指针,时针可以决定分针和秒针的位置,分针可以决定秒针的位置.为了简单起见,现在假设只有时针和分针. 现假设某一刻为H:M,(H=0,1,2-11:M=0,1,2..59),那么在该时刻分针的角度(距离起点0点)为:,时针的角度:, 那么时针和分针的夹角: 问题1.时针和分针重合的时刻? 令,化简之后得: 由此可见,每个小时之中都有一个时刻满足时针和分钟重合,注意当H=11的时候,M=60,也就是12点,即0点.所有满足时针分针重合的时刻为: [

360笔试题目

记得本科的时候算法课上看到过这个题目,当时没有做出来,今天做360笔试的时候竟然仍然没做出来,真蛋疼.回来研究了半天,我擦,两个小时做那么多题目,这个肯定做不出来. 题目: 大意是:给定一个字符串S:"BLFBFSYDLEAKLFBYM",和一个关键字T:"LBY",求出在S中包含T的最小字符串?那么应该求出最小字符串:"LFBY" 思路一:遍历T,再遍历S.(咋一看是这样,但是操作起来比较麻烦,我也没实现) 思路二:分别求出关键字T中第一个字符

360笔试编程题

360笔试题目: C++简单实现: 1 #include <stdio.h> 2 #include <iostream> 3 #include <math.h> 4 #include <sstream> 5 #include <cstring> 6 #include <vector> 7 #include <algorithm> 8 9 using namespace std; 10 11 12 const int MAX

关于360笔试部分题目小结

先看看笔试的两道编程题:第一道完全没有思路,哪位有思路的,麻烦写出来,给我留言哈! 编程题一: 小B最近迷上了字符串处理技术,他设计了各种处理方式,并计算字符串的属性.这次也不例外,他定义了一种新的字符置换方式.小B研究的字符串由ASCII码字母和“.”构成,这次的研究对象是“.”.他关心的对象是字符串中出现的连续两个“.”.若每次操作把其中最开始的连续两个“.”以一个“”替代,则可以将函数f(s) 定义为使得串中不出现连续两个“.”的最小置换次数. 现考虑m个字符替换操作,每次将指定位置的字符

360笔试题目-HashMap实现

自定义一个HashMap,实现map_put,map_delete,map_get方法,要求: 1.查找时间复杂度O(1) 2.. 3.. 因为Java中自带HashMap,平时直接用,也没有考虑,前一段时间只是实现了ArrayList,Vetor,Quene,并没有考虑HashMap.笔试的时候由于时间紧,我只是在HashMap中定义两个ArrayList,一个保存Key,一个保存Value,现在想想肯定是不对的,这根本没有按照要求实现.题目的原意是让实现链表,考察操作链表的能力.回来之后,我

2016 360笔试 编程题 2

360员工桂最近申请了一个长假,一个人背着包出去自助游了. 路上,他经过了一个小镇,发现小镇的人们都围在一棵树下争吵.桂上前询问情况,得知小镇的人们正缺一个镇长,他们希望能选一个知名又公正的镇长,即,大家希望能选出一个人,所有人都认识他,但同时他不认识镇上除自己以外的其他人(在此,我们默认每个人自己认识自己).可是小镇里的人太多了,一下子大家谁也说服不了谁. “这简单啊.”桂表示.于是他一下子统计出来了镇上人们相互之间的认识关系,并且一下子找到了合适的镇长人选. 现在你手上也拿到了这样一份认识关

[360]笔试编程题

大概意思是:选镇长,规则:所选之人不认识本镇其他人:本镇其他人都认识此人. 输入: 第一行T,表示测试样例数: 每个测试样例包含: 第一行n和m,分别表示本镇人数(每个人分别用1到n的序号表示)和认识的关系数: 接下来m行表示,人与人之间的认识关系(每行两个数Ai和Bi,表示Ai认识Bi,但不能具备Bi认识Ai的关系,Ai和Bi可能相同,表示自己认识自己) 输出: 2T行,分别为T个测试样例的输出结果: 每个测试样例包含两行: 第一行表示此测试样例,镇长的可选人数: 第二行表示所有可行人的序号.

360笔试(3-18)编程题

1.给一个半径为R的圆,圆心是(0,0),开始位于(R,0),分别求从始点顺时针和逆时针走长度为L的终点坐标 有可能走多圈,先处理成走一圈的形式,然后判是不是四个断点,如果是则输出 然后把L处理到第一象限,与x轴形成的夹角是L/R,y点坐标就是R*sin(L/R),那么x=sqrt(R*R-x*x) #include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=1e5+5; const dou

360笔试 给定a,b字符串 求出b相对于a的相对路径

题目描述:给出一个函数: a = "/qihoo/app/a/b/c/d/new.c"; b = "/qihoo/app/1/2/test.c"; 输出b相对于a的相对路径: ../../../../1/2/test.c #include <iostream> #include <string> #include <algorithm> #include <cstring> using namespace std; c