【 线段树】P12347 [蓝桥杯 2025 省 A 第二场] 栈与乘积|普及+ - 指南

P12347 [蓝桥杯 2025 省 A 第二场] 栈与乘积

题目背景

目前测试数据可能较水,我们之后会加强数据。

题目描述

给定一个栈,给出若干次如下类型的操作:

  1. 1   x 1 \ x 1x: 将 x x x 加入栈顶。
  2. 2 2 2: 将栈顶的数弹出(如果栈是空的,则什么都不做)。
  3. 3   y 3 \ y 3y: 查询栈内的最顶端 y y y 个数的乘积。如果大于等于 2 32 2^{32} 232,输出 OVERFLOW。如果栈内不足 y y y 个数,输出 ERROR

输入格式

输入的第一行包含一个正整数 Q Q Q,表示操作次数。

接下来 Q Q Q 行,每行包含一个或两个正整数表示一个操作,如果一行包含两个整数,两个整数之间用一个空格分隔。

输出格式

对于每个 3   y 3 \ y 3y 形式的操作,输出一行包含一个整数,表示答案。

输入输出样例 #1

输入 #1

9
1 65536
1 65536
3 2
3 3
2
1 1024
1 2
3 2
3 3

输出 #1

OVERFLOW
ERROR
2048
134217728

说明/提示

评测用例规模与约定

  • 对于 30 % 30\% 30% 的评测用例, Q ≤ 5000 Q \leq 5000 Q5000
  • 对于所有评测用例, 1 ≤ Q ≤ 10 5 1 \leq Q \leq 10^5 1Q105 0 ≤ x < 2 30 0 \leq x < 2^{30} 0x<230 1 ≤ y < 2 30 1 \leq y < 2^{30} 1y<230

线段树

单点修改 区间查询
值类型,保存类型:long long
线段树[0,Q),初始全部为1。cnt记录栈中元素。
入栈 线段树[cnt++]=x 出栈[–cnt]=1
节点合并:一,两个节点包括0,结果0。二,有溢出(-1),结果溢出。三,转成unit64,相乘如果大于uint32,-1;否则,值就是成绩。

代码

核心代码

#include <iostream>
  #include <sstream>
    #include <vector>
      #include<map>
        #include<unordered_map>
          #include<set>
            #include<unordered_set>
              #include<string>
                #include<algorithm>
                  #include<functional>
                    #include<queue>
                      #include <stack>
                        #include<iomanip>
                          #include<numeric>
                            #include <math.h>
                              #include <climits>
                                #include<assert.h>
                                  #include<cstring>
                                    #include<list>
                                      #include<array>
                                        #include <bitset>
                                          using namespace std;
                                          template<
                                          class T1
                                          , class T2
                                          >
                                          std::istream&
                                          operator >>
                                          (std::istream& in, pair<T1, T2>
                                            & pr) {
                                            in >> pr.first >> pr.second;
                                            return in;
                                            }
                                            template<
                                            class T1
                                            , class T2
                                            , class T3
                                            >
                                            std::istream&
                                            operator >>
                                            (std::istream& in, tuple<T1, T2, T3>
                                              & t) {
                                              in >>
                                              get<
                                              0>(t) >>
                                              get<
                                              1>(t) >>
                                              get<
                                              2>(t);
                                              return in;
                                              }
                                              template<
                                              class T1
                                              , class T2
                                              , class T3
                                              , class T4
                                              >
                                              std::istream&
                                              operator >>
                                              (std::istream& in, tuple<T1, T2, T3, T4>
                                                & t) {
                                                in >>
                                                get<
                                                0>(t) >>
                                                get<
                                                1>(t) >>
                                                get<
                                                2>(t) >>
                                                get<
                                                3>(t);
                                                return in;
                                                }
                                                template<
                                                class T1
                                                , class T2
                                                , class T3
                                                , class T4
                                                , class T5
                                                , class T6
                                                , class T7
                                                >
                                                std::istream&
                                                operator >>
                                                (std::istream& in, tuple<T1, T2, T3, T4,T5,T6,T7>
                                                  & t) {
                                                  in >>
                                                  get<
                                                  0>(t) >>
                                                  get<
                                                  1>(t) >>
                                                  get<
                                                  2>(t) >>
                                                  get<
                                                  3>(t) >>
                                                  get<
                                                  4>(t) >>
                                                  get<
                                                  5>(t) >>
                                                  get<
                                                  6>(t);
                                                  return in;
                                                  }
                                                  template<
                                                  class T
                                                  = int>
                                                  vector<T>
                                                    Read() {
                                                    int n;
                                                    cin >> n;
                                                    vector<T>
                                                      ret(n);
                                                      for (int i = 0; i < n; i++) {
                                                      cin >> ret[i];
                                                      }
                                                      return ret;
                                                      }
                                                      template<
                                                      class T
                                                      = int>
                                                      vector<T>
                                                        ReadNotNum() {
                                                        vector<T> ret;
                                                          T tmp;
                                                          while (cin >> tmp) {
                                                          ret.emplace_back(tmp);
                                                          if ('\n' == cin.get()) {
                                                          break;
                                                          }
                                                          }
                                                          return ret;
                                                          }
                                                          template<
                                                          class T
                                                          = int>
                                                          vector<T>
                                                            Read(int n) {
                                                            vector<T>
                                                              ret(n);
                                                              for (int i = 0; i < n; i++) {
                                                              cin >> ret[i];
                                                              }
                                                              return ret;
                                                              }
                                                              template<
                                                              int N = 1'000'000>
                                                              class COutBuff
                                                              {
                                                              public:
                                                              COutBuff() {
                                                              m_p = puffer;
                                                              }
                                                              template<
                                                              class T
                                                              >
                                                              void write(T x) {
                                                              int num[28], sp = 0;
                                                              if (x <
                                                              0)
                                                              *m_p++ = '-', x = -x;
                                                              if (!x)
                                                              *m_p++ = 48;
                                                              while (x)
                                                              num[++sp] = x % 10, x /= 10;
                                                              while (sp)
                                                              *m_p++ = num[sp--] + 48;
                                                              AuotToFile();
                                                              }
                                                              void writestr(const char* sz) {
                                                              strcpy(m_p, sz);
                                                              m_p += strlen(sz);
                                                              AuotToFile();
                                                              }
                                                              inline void write(char ch)
                                                              {
                                                              *m_p++ = ch;
                                                              AuotToFile();
                                                              }
                                                              inline void ToFile() {
                                                              fwrite(puffer, 1, m_p - puffer, stdout);
                                                              m_p = puffer;
                                                              }
                                                              ~COutBuff() {
                                                              ToFile();
                                                              }
                                                              private:
                                                              inline void AuotToFile() {
                                                              if (m_p - puffer > N - 100) {
                                                              ToFile();
                                                              }
                                                              }
                                                              char puffer[N], * m_p;
                                                              };
                                                              template<
                                                              int N = 1'000'000>
                                                              class CInBuff
                                                              {
                                                              public:
                                                              inline CInBuff() {
                                                              }
                                                              inline CInBuff<N>
                                                                &
                                                                operator>>
                                                                (char& ch) {
                                                                FileToBuf();
                                                                while (('\r' == *S) || ('\n' == *S) || (' ' == *S)) { S++;
                                                                }//忽略空格和回车
                                                                ch = *S++;
                                                                return *this;
                                                                }
                                                                inline CInBuff<N>
                                                                  &
                                                                  operator>>
                                                                  (int& val) {
                                                                  FileToBuf();
                                                                  int x(0), f(0);
                                                                  while (!isdigit(*S))
                                                                  f |= (*S++ == '-');
                                                                  while (isdigit(*S))
                                                                  x = (x <<
                                                                  1) + (x <<
                                                                  3) + (*S++ ^ 48);
                                                                  val = f ? -x : x; S++;
                                                                  //忽略空格换行 
                                                                  return *this;
                                                                  }
                                                                  inline CInBuff&
                                                                  operator>>
                                                                  (long long& val) {
                                                                  FileToBuf();
                                                                  long long x(0);
                                                                  int f(0);
                                                                  while (!isdigit(*S))
                                                                  f |= (*S++ == '-');
                                                                  while (isdigit(*S))
                                                                  x = (x <<
                                                                  1) + (x <<
                                                                  3) + (*S++ ^ 48);
                                                                  val = f ? -x : x; S++;
                                                                  //忽略空格换行
                                                                  return *this;
                                                                  }
                                                                  template<
                                                                  class T1
                                                                  , class T2
                                                                  >
                                                                  inline CInBuff&
                                                                  operator>>
                                                                  (pair<T1, T2>
                                                                    & val) {
                                                                    *this >> val.first >> val.second;
                                                                    return *this;
                                                                    }
                                                                    template<
                                                                    class T1
                                                                    , class T2
                                                                    , class T3
                                                                    >
                                                                    inline CInBuff&
                                                                    operator>>
                                                                    (tuple<T1, T2, T3>
                                                                      & val) {
                                                                      *this >>
                                                                      get<
                                                                      0>(val) >>
                                                                      get<
                                                                      1>(val) >>
                                                                      get<
                                                                      2>(val);
                                                                      return *this;
                                                                      }
                                                                      template<
                                                                      class T1
                                                                      , class T2
                                                                      , class T3
                                                                      , class T4
                                                                      >
                                                                      inline CInBuff&
                                                                      operator>>
                                                                      (tuple<T1, T2, T3, T4>
                                                                        & val) {
                                                                        *this >>
                                                                        get<
                                                                        0>(val) >>
                                                                        get<
                                                                        1>(val) >>
                                                                        get<
                                                                        2>(val) >>
                                                                        get<
                                                                        3>(val);
                                                                        return *this;
                                                                        }
                                                                        template<
                                                                        class T
                                                                        = int>
                                                                        inline CInBuff&
                                                                        operator>>
                                                                        (vector<T>
                                                                          & val) {
                                                                          int n;
                                                                          *this >> n;
                                                                          val.resize(n);
                                                                          for (int i = 0; i < n; i++) {
                                                                          *this >> val[i];
                                                                          }
                                                                          return *this;
                                                                          }
                                                                          template<
                                                                          class T
                                                                          = int>
                                                                          vector<T>
                                                                            Read(int n) {
                                                                            vector<T>
                                                                              ret(n);
                                                                              for (int i = 0; i < n; i++) {
                                                                              *this >> ret[i];
                                                                              }
                                                                              return ret;
                                                                              }
                                                                              template<
                                                                              class T
                                                                              = int>
                                                                              vector<T>
                                                                                Read() {
                                                                                vector<T> ret;
                                                                                  *this >> ret;
                                                                                  return ret;
                                                                                  }
                                                                                  private:
                                                                                  inline void FileToBuf() {
                                                                                  const int canRead = m_iWritePos - (S - buffer);
                                                                                  if (canRead >= 100) {
                                                                                  return;
                                                                                  }
                                                                                  if (m_bFinish) {
                                                                                  return;
                                                                                  }
                                                                                  for (int i = 0; i < canRead; i++)
                                                                                  {
                                                                                  buffer[i] = S[i];
                                                                                  //memcpy出错 
                                                                                  }
                                                                                  m_iWritePos = canRead;
                                                                                  buffer[m_iWritePos] = 0;
                                                                                  S = buffer;
                                                                                  int readCnt = fread(buffer + m_iWritePos, 1, N - m_iWritePos, stdin);
                                                                                  if (readCnt <= 0) { m_bFinish = true;
                                                                                  return;
                                                                                  }
                                                                                  m_iWritePos += readCnt;
                                                                                  buffer[m_iWritePos] = 0;
                                                                                  S = buffer;
                                                                                  }
                                                                                  int m_iWritePos = 0;
                                                                                  bool m_bFinish = false;
                                                                                  char buffer[N + 10], * S = buffer;
                                                                                  };
                                                                                  template<
                                                                                  class TSave
                                                                                  , class TRecord
                                                                                  >
                                                                                  class CSingeUpdateLineTree
                                                                                  {
                                                                                  protected:
                                                                                  virtual void OnQuery(TSave& ans, const TSave& cur) = 0;
                                                                                  virtual void OnUpdate(TSave& save, int iSave, const TRecord& update) = 0;
                                                                                  virtual void OnUpdateParent(TSave& par, const TSave& left, const TSave& r, int iSaveLeft, int iSaveRight) = 0;
                                                                                  };
                                                                                  template<
                                                                                  class TSave
                                                                                  , class TRecord
                                                                                  >
                                                                                  class CVectorSingUpdateLineTree
                                                                                  : public CSingeUpdateLineTree<
                                                                                  TSave, TRecord>
                                                                                  {
                                                                                  public:
                                                                                  CVectorSingUpdateLineTree(int iEleSize, TSave tDefault) :m_iEleSize(iEleSize), m_save(iEleSize * 4, tDefault), m_tDefault(tDefault) {
                                                                                  }
                                                                                  void Update(int index, TRecord update) {
                                                                                  Update(1, 0, m_iEleSize - 1, index, update);
                                                                                  }
                                                                                  TSave Query(int leftIndex, int leftRight, TSave tDefault) {
                                                                                  TSave ans = tDefault;
                                                                                  Query(ans, 1, 0, m_iEleSize - 1, leftIndex, leftRight);
                                                                                  return ans;
                                                                                  }
                                                                                  TSave Query(int leftIndex, int leftRight) {
                                                                                  return Query(leftIndex, leftRight, m_tDefault);
                                                                                  }
                                                                                  void Init(std::function<
                                                                                  void(TSave&
                                                                                  , const int&
                                                                                  )> fun) {
                                                                                  Init(fun, 1, 0, m_iEleSize - 1);
                                                                                  }
                                                                                  TSave QueryAll() {
                                                                                  return m_save[1];
                                                                                  }
                                                                                  protected:
                                                                                  int m_iEleSize;
                                                                                  void Init(std::function<
                                                                                  void(TSave&
                                                                                  , const int&
                                                                                  )> fun, int iNodeNO, int iSaveLeft, int iSaveRight)
                                                                                  {
                                                                                  if (iSaveLeft == iSaveRight) {
                                                                                  fun(m_save[iNodeNO], iSaveLeft);
                                                                                  return;
                                                                                  }
                                                                                  const int mid = iSaveLeft + (iSaveRight - iSaveLeft) / 2;
                                                                                  Init(fun, iNodeNO * 2, iSaveLeft, mid);
                                                                                  Init(fun, iNodeNO * 2 + 1, mid + 1, iSaveRight);
                                                                                  this->
                                                                                  OnUpdateParent(m_save[iNodeNO], m_save[iNodeNO * 2], m_save[iNodeNO * 2 + 1], iSaveLeft, iSaveRight);
                                                                                  }
                                                                                  void Query(TSave& ans, int iNodeNO, int iSaveLeft, int iSaveRight, int iQueryLeft, int iQueryRight) {
                                                                                  if ((iSaveLeft >= iQueryLeft) &&
                                                                                  (iSaveRight <= iQueryRight)) {
                                                                                  this->
                                                                                  OnQuery(ans, m_save[iNodeNO]);
                                                                                  return;
                                                                                  }
                                                                                  if (iSaveLeft == iSaveRight) {
                                                                                  //没有子节点
                                                                                  return;
                                                                                  }
                                                                                  const int mid = iSaveLeft + (iSaveRight - iSaveLeft) / 2;
                                                                                  if (mid >= iQueryLeft) {
                                                                                  Query(ans, iNodeNO * 2, iSaveLeft, mid, iQueryLeft, iQueryRight);
                                                                                  }
                                                                                  if (mid + 1 <= iQueryRight) {
                                                                                  Query(ans, iNodeNO * 2 + 1, mid + 1, iSaveRight, iQueryLeft, iQueryRight);
                                                                                  }
                                                                                  }
                                                                                  void Update(int iNodeNO, int iSaveLeft, int iSaveRight, int iUpdateNO, TRecord update) {
                                                                                  if (iSaveLeft == iSaveRight)
                                                                                  {
                                                                                  this->
                                                                                  OnUpdate(m_save[iNodeNO], iSaveLeft, update);
                                                                                  return;
                                                                                  }
                                                                                  const int mid = iSaveLeft + (iSaveRight - iSaveLeft) / 2;
                                                                                  if (iUpdateNO <= mid) {
                                                                                  Update(iNodeNO * 2, iSaveLeft, mid, iUpdateNO, update);
                                                                                  }
                                                                                  else {
                                                                                  Update(iNodeNO * 2 + 1, mid + 1, iSaveRight, iUpdateNO, update);
                                                                                  }
                                                                                  this->
                                                                                  OnUpdateParent(m_save[iNodeNO], m_save[iNodeNO * 2], m_save[iNodeNO * 2 + 1], iSaveLeft, iSaveRight);
                                                                                  }
                                                                                  vector<TSave> m_save;
                                                                                    const TSave m_tDefault;
                                                                                    };
                                                                                    template<
                                                                                    class TSave
                                                                                    , class TRecord
                                                                                    >
                                                                                    class CTreeSingeLineTree
                                                                                    : public CSingeUpdateLineTree<
                                                                                    TSave, TRecord>
                                                                                    {
                                                                                    protected:
                                                                                    struct CTreeNode
                                                                                    {
                                                                                    int Cnt()const {
                                                                                    return m_iMaxIndex - m_iMinIndex + 1;
                                                                                    }
                                                                                    int m_iMinIndex;
                                                                                    int m_iMaxIndex;
                                                                                    TSave data;
                                                                                    CTreeNode* m_lChild = nullptr, * m_rChild = nullptr;
                                                                                    ~CTreeNode() {
                                                                                    delete m_lChild; m_lChild = nullptr;
                                                                                    delete m_rChild; m_rChild = nullptr;
                                                                                    }
                                                                                    };
                                                                                    CTreeNode* m_root;
                                                                                    TSave m_tDefault;
                                                                                    public:
                                                                                    CTreeSingeLineTree(int iMinIndex, int iMaxIndex, TSave tDefault) {
                                                                                    m_tDefault = tDefault;
                                                                                    m_root = CreateNode(iMinIndex, iMaxIndex);
                                                                                    }
                                                                                    void Update(int index, TRecord update) {
                                                                                    Update(m_root, index, update);
                                                                                    }
                                                                                    TSave QueryAll() {
                                                                                    return m_root->data;
                                                                                    }
                                                                                    TSave Query(int leftIndex, int leftRight) {
                                                                                    TSave ans = m_tDefault;
                                                                                    Query(ans, m_root, leftIndex, leftRight);
                                                                                    return ans;
                                                                                    }
                                                                                    ~CTreeSingeLineTree() {
                                                                                    delete m_root;
                                                                                    }
                                                                                    protected:
                                                                                    void Query(TSave& ans, CTreeNode* node, int iQueryLeft, int iQueryRight) {
                                                                                    if ((node->m_iMinIndex >= iQueryLeft) &&
                                                                                    (node->m_iMaxIndex <= iQueryRight)) {
                                                                                    this->
                                                                                    OnQuery(ans, node->data);
                                                                                    return;
                                                                                    }
                                                                                    if (1 == node->
                                                                                    Cnt()) {
                                                                                    //没有子节点
                                                                                    return;
                                                                                    }
                                                                                    CreateChilds(node);
                                                                                    const int mid = node->m_iMinIndex + (node->m_iMaxIndex - node->m_iMinIndex) / 2;
                                                                                    if (mid >= iQueryLeft) {
                                                                                    Query(ans, node->m_lChild, iQueryLeft, iQueryRight);
                                                                                    }
                                                                                    if (mid + 1 <= iQueryRight) {
                                                                                    Query(ans, node->m_rChild, iQueryLeft, iQueryRight);
                                                                                    }
                                                                                    }
                                                                                    void Update(CTreeNode* node, int iUpdateNO, TRecord update) {
                                                                                    if ((iUpdateNO < node->m_iMinIndex) || (iUpdateNO > node->m_iMaxIndex)) {
                                                                                      return;
                                                                                      }
                                                                                      if (1 == node->
                                                                                      Cnt()) {
                                                                                      this->
                                                                                      OnUpdate(node->data, node->m_iMinIndex, update);
                                                                                      return;
                                                                                      }
                                                                                      CreateChilds(node);
                                                                                      Update(node->m_lChild, iUpdateNO, update);
                                                                                      Update(node->m_rChild, iUpdateNO, update);
                                                                                      this->
                                                                                      OnUpdateParent(node->data, node->m_lChild->data, node->m_rChild->data, node->m_iMinIndex, node->m_iMaxIndex);
                                                                                      }
                                                                                      void CreateChilds(CTreeNode* node) {
                                                                                      if (nullptr != node->m_lChild) {
                                                                                      return;
                                                                                      }
                                                                                      const int iSaveLeft = node->m_iMinIndex;
                                                                                      const int iSaveRight = node->m_iMaxIndex;
                                                                                      const int mid = iSaveLeft + (iSaveRight - iSaveLeft) / 2;
                                                                                      node->m_lChild = CreateNode(iSaveLeft, mid);
                                                                                      node->m_rChild = CreateNode(mid + 1, iSaveRight);
                                                                                      }
                                                                                      CTreeNode* CreateNode(int iMinIndex, int iMaxIndex) {
                                                                                      CTreeNode* node = new CTreeNode;
                                                                                      node->m_iMinIndex = iMinIndex;
                                                                                      node->m_iMaxIndex = iMaxIndex;
                                                                                      node->data = m_tDefault;
                                                                                      return node;
                                                                                      }
                                                                                      };
                                                                                      typedef long long TSave;
                                                                                      typedef long long TRecord;
                                                                                      class CMyLineTree
                                                                                      : public CTreeSingeLineTree<
                                                                                      TSave, TRecord>
                                                                                      {
                                                                                      public:
                                                                                      CMyLineTree() :CTreeSingeLineTree<TSave, TRecord>(0, 100'000, 1)
                                                                                        {
                                                                                        }
                                                                                        protected:
                                                                                        virtual void OnInit(TSave& save, int iSave) {
                                                                                        };
                                                                                        virtual void OnQuery(TSave& ans, const TSave& cur) {
                                                                                        if ((0 == ans) || (0 == cur)) { ans = 0;
                                                                                        return;
                                                                                        }
                                                                                        if ((-1 == ans) || (-1 == cur)) { ans = -1;
                                                                                        return;
                                                                                        }
                                                                                        unsigned long long tmp = ans * cur;
                                                                                        if (tmp >= (1LL <<
                                                                                        32)) {
                                                                                        ans = -1;
                                                                                        }
                                                                                        else {
                                                                                        ans = tmp;
                                                                                        }
                                                                                        }
                                                                                        virtual void OnUpdate(TSave& save, int iSave, const TRecord& update)
                                                                                        {
                                                                                        save = update;
                                                                                        }
                                                                                        virtual void OnUpdateParent(TSave& par, const TSave& left, const TSave& r, int iSaveLeft, int iSaveRight)
                                                                                        {
                                                                                        par = left;
                                                                                        OnQuery(par, r);
                                                                                        }
                                                                                        };
                                                                                        class Solution
                                                                                        {
                                                                                        public:
                                                                                        vector<
                                                                                        long long>
                                                                                        Ans(vector<pair<
                                                                                        int,unsigned int>>
                                                                                        & ope) {
                                                                                        CMyLineTree sg;
                                                                                        int cnt = 0;
                                                                                        vector<
                                                                                        long long> ans;
                                                                                        for (const auto&
                                                                                        [kind, x] : ope) {
                                                                                        if (1 == kind) {
                                                                                        sg.Update(cnt++, x);
                                                                                        }
                                                                                        else if (2 == kind) {
                                                                                        if (cnt >
                                                                                        0) { sg.Update(--cnt, 1);
                                                                                        };
                                                                                        }
                                                                                        else if (3 == kind) {
                                                                                        if (x > cnt) {
                                                                                        ans.emplace_back(-2);
                                                                                        }
                                                                                        else
                                                                                        {
                                                                                        ans.emplace_back(sg.Query(cnt - x, cnt - 1));
                                                                                        }
                                                                                        }
                                                                                        }
                                                                                        return ans;
                                                                                        }
                                                                                        };
                                                                                        int main() {
                                                                                        #ifdef _DEBUG
                                                                                        freopen("a.in", "r", stdin);
                                                                                        #endif // DEBUG 
                                                                                        ios::sync_with_stdio(0); cin.tie(nullptr);
                                                                                        //CInBuff<> in; COutBuff<10'000'000> ob; 
                                                                                          int Q;
                                                                                          cin >> Q;
                                                                                          vector<pair<
                                                                                          int, unsigned int>>
                                                                                          ope(Q);
                                                                                          for (int i = 0; i < Q; i++) {
                                                                                          cin >> ope[i].first;
                                                                                          if (2 != ope[i].first) {
                                                                                          cin >> ope[i].second;
                                                                                          }
                                                                                          }
                                                                                          #ifdef _DEBUG 
                                                                                          // printf("K=%d", K);
                                                                                          Out(ope, ",ope=");
                                                                                          //Out(P, ",P=");
                                                                                          /*Out(edge, ",edge=");
                                                                                          Out(que, ",que=");*/
                                                                                          //Out(ab, ",ab=");
                                                                                          //Out(par, "par=");
                                                                                          //Out(que, "que=");
                                                                                          //Out(B, "B=");
                                                                                          #endif // DEBUG 
                                                                                          auto res = Solution().Ans(ope);
                                                                                          for (const auto& ll : res)
                                                                                          {
                                                                                          if (-1 == ll) {
                                                                                          cout <<
                                                                                          "OVERFLOW";
                                                                                          }
                                                                                          else if (-2 == ll) {
                                                                                          cout <<
                                                                                          "ERROR";
                                                                                          }
                                                                                          else {
                                                                                          cout << ll;
                                                                                          }
                                                                                          cout <<
                                                                                          "\n";
                                                                                          }
                                                                                          return 0;
                                                                                          };

单元测试

TEST_METHOD(TestMethod11)
{
ope = {
{
1,65536
},{
1,65536
},{
3,2
},{
3,3
},{
2,0
},{
1,1024
},{
1,2
},{
3,2
},{
3,3
}
};
auto res = Solution().Ans(ope);
AssertV({
-1,-2,2048,134217728
}, res);
}
TEST_METHOD(TestMethod12)
{
ope = {
{
2,0
},{
2,0
},{
2,0
},{
1,65536
},{
3,2
},{
3,1
}
};
auto res = Solution().Ans(ope);
AssertV({
-2,65536
}, res);
}

# 扩展阅读

我想对大家说的话
工作中遇到的问题,可以按类别查阅鄙人的算法文章,请点击《算法与数据汇总》。
学习算法:按章节学习《喜缺全书算法册》,大量的题目和测试用例,打包下载。重视操作
有效学习:明确的目标 及时的反馈 拉伸区(难度合适) 专注
闻缺陷则喜(喜缺)是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛
失败+反思=成功 成功+反思=成功

视频课程

先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771
如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法用**C++**实现。

posted @ 2025-09-06 17:31  wzzkaifa  阅读(11)  评论(0)    收藏  举报