#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+2+3
先计算
1 + 2 = 3,再计算3 + 3 = 6。 结果是:6 - 10-2
直接进行减法:
10 - 2 = 8。 结果是:8 - 2*3*4
先计算
2 * 3 = 6,再计算6 * 4 = 24。 结果是:24 - 20/3
进行整数除法:
20 // 3 = 6(去除小数部分,保留整数部分)。 结果是:6 - 7%5
计算
7 % 5,即 7 除以 5 的余数:7 % 5 = 2。 结果是:2 - 8^3
按位异或运算:
8 ^ 3 = 11(二进制:1000 ^ 0011 = 1011,即 11)。 结果是:11 - 10&6
按位与运算:
10 & 6 = 2(二进制:1010 & 0110 = 0010,即 2)。 结果是:2 - 9|1
按位或运算:
9 | 1 = 9(二进制:1001 | 0001 = 1001,即 9)。 结果是:9 - 16>>2
右移运算:
16 >> 2 = 4(二进制:10000 >> 2 = 100,即 4)。 结果是:4 - 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
数据说明
本题采用梯度化数据设计,具体如下:
-
-
-
-
-
除法 /、取模 %:右操作数 > 0
- 30% 的数据:子串仅包含
+(加法)、-(减法)两种运算符,仅需处理基础的加减顺序运算,无需考虑复杂运算逻辑。 - 50% 的数据:子串包含
+、-、*(乘法)、/(除法)、%(取模)五种运算符。 - 80% 的数据:子串包含
+、-、*、/、%、^(按位异或)、&(按位与)、|(按位或)八种运算符。 - 100% 的数据:子串包含全部十种运算符(
+、-、*、/、%、^、&、|、>>(右移位)、<<(左移位))。
相关
在下列比赛中: