zoukankan      html  css  js  c++  java
  • (stack)合并数字

    蒜头君得到了 n 个数,他想对这些数进行下面这样的操作,选出最左边的相邻的差的绝对值为 1 的两个数,只保留较小的数,删去较大的数,直到没有两个相邻的差的绝对值为 1 的数,问最多可以进行多少次这样的操作?
    输入格式
    输入第一行n 表示数字个数
    第二行输入 x1,x2...xn
    输出格式:
    输出一行,为一个整数,表示蒜头君最多可以进行多少次这样的操作。

    输入样例:
    4
    1  2  0  1

    输出样例:
    3

    #include<cstdio>
    #include<iostream>
    #include<string.h>
    #include<stdlib.h>
    #include<stack>
    using namespace std;
    int dp[150][150],s[105]; 
    int n,m,k;
    int ans;
    bool vis[105][105];
    
    int main(){
        stack<int> sk;
        int x;
        cin>>n;
        for(int i=0;i<n;i++){
            cin>>x;                                //将每次输入的数x和栈顶元素比较 
            while(!sk.empty()&&x==sk.top()-1){       //x比栈顶元素小1 表示栈顶元素可消去 循环消去所有比此数x大1的栈顶元素 
                sk.pop();
                ans++;
            }
            if(!sk.empty()&&x==sk.top()+1){          //x比栈顶元素大1 则此数应该被消去 
                ans++;
            }
            else{
                sk.push(x);                         //若此时 该数x 和栈顶元素不存在差1的关系 则将x入栈 
            }
            
        }
        cout<<ans;
        return 0;
    }
  • 相关阅读:
    Bzoj 2134: [国家集训队2011]单选错位(期望)
    洛谷 P1230 智力大冲浪
    洛谷 P2695 骑士的工作
    洛谷 P1551 亲戚
    洛谷 P1111 修复公路
    洛谷 P1599 结算日
    HDU 1166 敌兵布阵
    洛谷 P2212 [USACO14MAR]浇地Watering the Fields
    洛谷 P1506 拯救oibh总部
    洛谷 P1396 营救
  • 原文地址:https://www.cnblogs.com/xusi/p/12526115.html
Copyright © 2011-2022 走看看