• 计蒜客 蓝桥杯模拟五 合并数字


    蒜头君得到了 nn 个数,他想对这些数进行下面这样的操作,选出最左边的相邻的差的绝对值为 11 的两个数,只保留较小的数,删去较大的数,直到没有两个相邻的差的绝对值为 11 的数,问最多可以进行多少次这样的操作?

    输入格式

    输入第一行为一个整数 n(1 leq n leq 10^5)n(1n105),表示数字的总数

    第二行为 nn 个整数 x_1,x_2,...,x_n(0 leq x_i leq 10^9)x1,x2,...,xn(0xi109),表示这些数。

    输出格式

    输出一行,为一个整数,表示蒜头君最多可以进行多少次这样的操作。

    样例输入

    4
    1 2 0 1

    样例输出

    3
    用stack使结果简化很多
     1 #include<iostream>
     2 #include<stack>
     3 using namespace std;
     4 int main()
     5 {
     6     stack <int> a;
     7     int sum = 0;
     8     int n,temp;
     9     cin >> n;
    10     for (int i = 0; i < n; i++)
    11     {
    12         cin >> temp;
    13         while (!a.empty() && a.top() - temp == 1)
    14         {
    15             a.pop();
    16             sum++;
    17         }
    18         if (!a.empty() && temp - a.top() == 1) sum++;
    19         else a.push(temp);
    20     }
    21     cout << sum << endl;
    22     return 0;
    23 }

    注:此为大佬的题解改良

  • 相关阅读:
    Mongodb_文件存储
    Mongodb_技巧
    Blend_Effect
    WPF_界面_图片/界面/文字模糊解决之道整理
    ASP.NET Boilerplate 深入系列之:概述
    P1280 尼克的任务
    P1802 5倍经验日
    271. 杨老师的照相排列
    P1726 上白泽慧音
    P1983 [NOIP2013 普及组] 车站分级
  • 原文地址:https://www.cnblogs.com/kangdong/p/8660594.html
Copyright © 2020-2023  润新知