zoukankan      html  css  js  c++  java
  • HIHOcoder编程总结

    [Offer收割]编程练习赛44

    对于第一题题目1 : 扫雷游戏,首先要想清楚思路,虽然是暴力算法,但是这八个方向要自己把坐标写正确,不要慌乱,自己写的时候就写错了一个,第二个就是判断的时候,j + 1>=0,这种是显然的事情,应该是j +1 < N,写草稿也要认真。

    还有一个非常非常大的错误。

    int N = 0;
    cin >> N;    
    vector<string> input;
    input.resize(N);
    for (int i = 0; i < N; ++i) {
        string tmp;
        cin >> tmp;
        input.push_back(tmp);
    }

    前面resize直接导致input有N个空串,后面再压入就会导致有2N个字符串。

    第三题:题目3 : 车队

    时间限制:10000ms
    单点时限:1000ms
    内存限制:256MB
    描述
    在一条单车道的公路上有N辆汽车行驶,从前向后第i辆车的最高速度是Vi。
    
    所有车辆都会尽量保持最高速度行驶。不过由于只有单车道,所以当后方快车追上前方慢车后,无法超车,只能降速跟在慢车后面。  
    
    于是经过足够长时间(足够后方快车追上前方慢车)的行驶后,某些车辆会聚成一队以相同的速度向前行驶。我们把这些聚成一队的车辆称为一个"车队"。不同车队之间的距离会越来越大。  
    
    例如假设有5辆车,速度依次是[3, 5, 4, 1, 2],则经过足够长时间行驶后,第1、2、3辆会聚成一个车队,第4、5辆会聚成另一个车队。  
    
    现在假设你可以"拿掉"其中一些车辆,但不能改变剩余的车辆的前后次序和最高速度。请计算最少"拿掉"多少辆车,可以使得剩余的车辆数目恰好等于剩余车辆经过足够长时间行驶后形成的车队数量。(换句话说每辆车单独一个车队)  
    
    在上例中"拿掉"第一辆和第四辆之后,[5, 4, 2]会最终形成3个车队,满足条件。  
    
    输入
    第一行包含一个整数N。  
    
    第二行包含N个整数V1, V2, ... VN。  
    
    对于30%的数据,1 ≤ N ≤ 1000  
    
    对于100%的数据,1 ≤ N ≤ 100000, 1 ≤ Vi ≤ 100000, Vi保证两两不同。
    
    输出
    一个整数表示答案。
    
    样例输入
    5  
    3 5 4 1 2
    样例输出
    2

    这题是一个最长上升子序列问题。开始自己马上不想就认为找到最长上升子序列和最长下降子序列就可以了,首先需要理解题目意思,应该是最后的答案是一个最长递降子序列,所以需要将vector进行反转,然后在进行求解最长递增子序列。

  • 相关阅读:
    如何编写一个有效的缓存
    [深入Maven源代码]maven绑定命令行参数到具体插件
    java.util.ServiceLoader的用法
    非阻塞算法-栈
    非阻塞算法-简单的计数器
    Excelbatis-一个将excel文件读入成实体列表、将实体列表解析成excel文件的ORM框架,简洁易于配置、可扩展性好
    教你如何迭代地遍历二叉树
    [开源项目]Shell4Win,一个在Windows下执行shell命令的解释器
    [LeetCode]Single Number II
    CAS5.3服务环境搭建
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/8283416.html
Copyright © 2011-2022 走看看