#68. # 希蒙的csp之旅

# 希蒙的csp之旅

题目描述:

希蒙同学在2025年9月以优异的成绩通过了CSP-J初赛。10月参加复赛时,他发现第二题正是这道题。希望看到本题的同学们也能顺利通过初赛与复赛

现给定一行由多个子串组成的字符串,每个子串中包含一种运算符,并使用这一运算符对子串内的数字从左至右依次进行计算。支持的运算符有 +、-、*、/,%(取模)、^(按位异或)、&(按位与)、|(按位或)、>>(右移位)、<<(左移位)等运算符。计算时不考虑运算符优先级,因为每个子串只包含一种运算符,均按子串中运算符出现的顺序从左至右依次进行操作。除法为整数除法,结果取整数部分

  • 每个子串仅包含一种运算符,且该运算符两侧为无前导零的非负整数。
  • 子串之间用至少一个空格分隔,字符串总长度不超过10000,子串个数不超过300。
  • 运算按照子串中运算符从左至右依次进行。
  • 除法运算结果取整数部分。 计算每个子串的运算结果后,输出其中的最大值。

输入格式

一行字符串 S。字符串由若干子串组成,各子串之间用至少一个空格隔开。每个子串仅包含一种运算符,运算符两侧为无前导零的非负整数。字符串 S 的总长度不超过10000,子串个数不超过300。

输出格式

一个整数,表示所有子串计算结果中的最大值。

样例1

输入

1+2+3 10-2 2*3*4 20/3 7%5 8^3 10&6 9|1 16>>2 3<<4

输出

48

样例解释

我们依次计算每个子串的值,最终找到其中的最大值。

  1. 1+2+3 先计算 1 + 2 = 3,再计算 3 + 3 = 6。 结果是:6
  2. 10-2 直接进行减法:10 - 2 = 8。 结果是:8
  3. 2*3*4 先计算 2 * 3 = 6,再计算 6 * 4 = 24。 结果是:24
  4. 20/3 进行整数除法:20 // 3 = 6(去除小数部分,保留整数部分)。 结果是:6
  5. 7%5 计算 7 % 5,即 7 除以 5 的余数:7 % 5 = 2。 结果是:2
  6. 8^3 按位异或运算:8 ^ 3 = 11(二进制:1000 ^ 0011 = 1011,即 11)。 结果是:11
  7. 10&6 按位与运算:10 & 6 = 2(二进制:1010 & 0110 = 0010,即 2)。 结果是:2
  8. 9|1 按位或运算:9 | 1 = 9(二进制:1001 | 0001 = 1001,即 9)。 结果是:9
  9. 16>>2 右移运算:16 >> 2 = 4(二进制:10000 >> 2 = 100,即 4)。 结果是:4
  10. 3<<4 左移运算:3 << 4 = 48(二进制:0011 << 4 = 1100000,即 48)。 结果是:48

所有子串的计算结果分别是:6, 8, 24, 6, 2, 11, 2, 9, 4, 48。 其中的最大值是:48

样例 2

输入

4+5 8-3 7*2 15/3 20%3 6^2 14&7 10|5 32>>3 5<<2

输出

20

数据说明

本题采用梯度化数据设计,具体如下:

  • 每个数字:0x109,无前导零每个数字:0 ≤ x ≤ 10^9,无前导零

  • 乘法子串:只允许二元(形如ab),两数均109乘法子串:只允许二元(形如 a*b),两数均 ≤ 10^9

  • 左移<<:该子串内所有移位量之和30左移 <<:该子串内所有移位量之和 ≤ 30

  • 右移>>:每次移位量0s<63右移 >>:每次移位量 0 ≤ s < 63

  • 除法 /、取模 %:右操作数 > 0


  • 30% 的数据:子串仅包含 +(加法)、-(减法)两种运算符,仅需处理基础的加减顺序运算,无需考虑复杂运算逻辑。
  • 50% 的数据:子串包含 +-*(乘法)、/(除法)、%(取模)五种运算符。
  • 80% 的数据:子串包含 +-*/%^(按位异或)、&(按位与)、|(按位或)八种运算符。
  • 100% 的数据:子串包含全部十种运算符(+-*/%^&|>>(右移位)、<<(左移位))。