CSP-J 2022
CSP-J 2022 总结
T1 乘方#
思路#
首先,不看数据范围,可以知道最简单的方法就是从
但是,现在有一个问题,
那该怎么办呢?
如果你仔细观察的话,就会发现题目有一个条件:如果大于
这说明了什么?
你知道
但是,这里还要考虑一个事情,如果
T2 解密#
思路#
70 分#
首先,题目很明显告诉了我们一个公式:
如果你是个爱仔细观察数据的同学,你就会发现,第 7 个数据点保证
100 分#
如果仔细观察数据范围的话,你会看到题目给了一个貌似没有什么用的
那么,就可以考虑从
首先,我们知道
那么
而
紧接着,我们应该都知道 “和一定,差小积大”,也就是当和是一个定值的时候,两个数的差越小,乘积就越大。
而在这里,你又知道
那么,就可以请二分登场了。
这个事情就变得很简单了,二分
其实还有一种解方程的解法,只是我不会。
T3 逻辑表达式#
思路#
首先,我们得知道,逻辑表达式实际上只有 2 种运算符 (&, |)
,但是因为 ()
的加入,使得这个运算变得更加复杂了。
所以,题目温馨的给出了没有 ()
的数据,我们就先处理这种情况。
首先,我们知道 &
的运算优先级是大于 |
的,所以其实可以简单的将 |
看作 +
,&
看作 *
,这就对应到了洛谷上的另一道题,P1981。
其实就是用栈来模拟,当碰到 &
时,就运行栈顶的所有 |
运算符。
那么,()
到底会影响到什么呢?
我们都知道,在 ()
内的所有运算,都是优先于 ()
外的运算的,所以,()
影响的其实是 优先级。
那么我们就可以将 &
的优先级定为 1,|
的优先级定为 0。
而这里,有两种优先级,所以我们可以在每一层括号中,将所有运算符的优先级都加上 2,当脱离出这一层括号时,就减少 2。
所以可以用一个基础值来记录经过了多少个括号,然后对于每一个运算符,直接用基础值加上原本的运算符优先级就可以了。
那么短路次数又应该怎么计算呢?
其实也很简单,只要在每次运算的时候进行计算就可以了。
如果当前不发生短路,就直接将两个运算数带着的短路次数进行相加即可,否则,就只留下前面运算数的短路次数,并且加上这次短路即可。
作者:cn
出处:https://www.cnblogs.com/chengning0909/p/17173908.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】