zoukankan      html  css  js  c++  java
  • 计蒜客 蓝桥杯模拟五 合并数字

    蒜头君得到了 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 }

    注:此为大佬的题解改良

  • 相关阅读:
    简易自制线程池(备忘)
    大数据量的删除过程查看
    收集书籍备忘
    6月12日C代码
    fseek()
    区分int *p[4]与int (*p)[4]
    常用的字符串处理函数 C语言
    6月11日
    C学习代码
    文件读取 C语言
  • 原文地址:https://www.cnblogs.com/kangdong/p/8660594.html
Copyright © 2011-2022 走看看