#HX1254I. 位运算表达式

提交0 通过0
通过率0%
时间限制1000ms
内存限制128MiB
    ID: 10066 传统题 1000ms 128MiB 尝试: 0 已通过: 0 难度: 普及+/提高- 上传者: 标签>编程题C++CSPCSP复赛CSP复赛专项练习暑假CSP复赛集训暑假集训1254-表达式递归

题目描述

题目描述

给定一个表达式,只包含 |& 和数字,| 表示按位或,& 表示按位与。

&” 的优先级比 “|” 高,所以计算时要遵循以下规则:

(1)同时有“|”和“&”的,先算最左边的“&”。

(2)只有“|”或者只有“&”的,先算最左边的“|”或“&”。

我们不止要计算表达式的值,还要计算最高的比特位翻转的次数。我们保证表达式中所有数都是 8 位无符号整数,范围是 0∼255,其中 0∼127 的最高位是 0,128∼255 的最高位是 1。

对于每次运算,如果计算结果的最高位和运算符左边的运算数的最高位不同,那么就记录一次翻转。

输出表达式的值和计算过程中最高位的翻转次数。

输入格式

一行字符串,表示要计算的表达式。

对于 100% 的数据,00\le 输入的字符序列长度 100000\le 100000

出现的每个整数都在 0∼255 之内。

输出格式

输出两个整数,分别表示表达式的值和计算过程中最高位的翻转次数。

样例输入

52|129&0

样例输出

52 1

提示

首先计算 129&0 计算结果是 0,最高位和运算符左边的 129 不同,翻转一次。

然后计算 52|0 计算结果是 52,最高位和运算符左边的 52 相同,不翻转。

52|129&0
52 1
52|129&0
52 1
52|129&0
52 1