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

    emmmmmm,这种到了最后才出结果的比赛真的很痛苦,考试的时候想的太简单最后结果只过了一组数据。。。
    考试时的代码
    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<cmath>
    #include<queue>
    #define maxn 100050
    #define debug(a) cout << #a << " " << a << endl
    using namespace std;
    typedef long long ll;
    int main() {
        int n;
        while( cin >> n ) {
            int num = 0, t, a[maxn];
            cin >> t;
            for( int i = 1; i < n; i ++ ) {
                cin >> a[i];
                if( abs( t - a[i] ) == 1 ) {
                    num ++;
                    t = min( t, a[i] );
                } else {
                    t = a[i];
                }
            }
            cout << num << endl;
        }
        return 0;
    }

    考完后补题的时候看别人的代码才想起来求的是最多,删去一个数字后可能会造成删去的数字前面的数和他后面的数满足相差一(啊啊啊啊啊,要是平常马上出结果的话估计会考虑到把)

    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<cmath>
    #include<queue>
    #define maxn 100050
    #define debug(a) cout << #a << " " << a << endl
    using namespace std;
    typedef long long ll;
    int main() {
        int n;
        while( cin >> n ) {
            int num = 0, cnt = 0, a[maxn], b[maxn];
            for( int i = 0; i < n; i ++ ) {
                cin >> a[i];
            }
            b[0] = -9;
            for( int i = 0; i < n; i ++ ) {
                if( abs( a[i] - b[cnt] ) == 1 ) {
                    num ++;
                    if( b[cnt] > a[i] ) {
                        cnt --;//删去数字的时候下标后退方便判断删去后是否会形成一个差值为一
                        i --;
                    }
                } else {
                    cnt ++;
                    b[cnt] = a[i];
                }
            }
            cout << num << endl;
        }
        return 0;
    }
    彼时当年少,莫负好时光。
  • 相关阅读:
    CSS清浮动
    深入理解BFC
    深入理解CSS浮动
    CSS颜色模式转换器的实现
    深入理解CSS背景
    理解CSS前景色和透明度
    深入理解CSS六种颜色模式
    HTML学习目录
    深入理解display属性
    深入理解盒模型
  • 原文地址:https://www.cnblogs.com/l609929321/p/8659654.html
Copyright © 2011-2022 走看看