CSP-J 2022 逻辑表达式

CSP-J 2022 逻辑表达式

又一次被算术表达式崩了,每次遇到相似的题每次不订正,留下惨痛的教训。
思维的养成比单纯理解更重要。


以后看到表达式就要往树上想

表达式存在优先级不好计算,所以想办法使之可以顺序运算,用 后缀表达式 可以实现这一点。

然后将每个数字赋予一个三元组即三个答案,按照后缀表达式,每次碰到符号后将栈顶的两个元素合并,最后剩下的那个元素即是答案。

转移如下:

if(q.front()=='&'){
    if(A.v==0) Q.push((qh){0,A.a+1,A.b});
    else Q.push((qh){B.v,A.a+B.a,A.b+B.b});
}
else{
    if(A.v==1) Q.push((qh){1,A.a,A.b+1});
    else Q.push((qh){B.v,A.a+B.a,A.b+B.b});
}

代码

你可能感兴趣的:(学习,c++)