2020.03.21日常总结——思维题与全面的思考

本文总结了两道洛谷平台的思维题目,包括[TJOI2018]数学计算问题,通过使用线段树解决爆 的难题,以及正误问题的解法,强调在编程中全面思考的重要性。
摘要由CSDN通过智能技术生成

思维题——洛谷P4588     [TJOI2018]数学计算 \color{green}{\text{思维题——洛谷P4588\ \ \ \ \ [TJOI2018]数学计算}} 思维题——洛谷P4588     [TJOI2018]数学计算

【题目】: \color{blue}{\text{【题目】:}} 【题目】: 你有一个数 x x x,初始为 1 1 1。你有两种操作,分别为:

    1. 给定一个数 m m m,把 x x x 变成 x × m x \times m x×m,然后输出 x x x mod \text{mod} mod 取模的值。
    1. 给定一个数 t t t,把 x x x 变为 x / x/ x/ t t t 次操作所乘的数。如第 t t t 次操作所乘数为 2 2 2,则把 x x x 变为 x 2 \dfrac{x}{2} 2x。数据保证第 t t t 次操作一定是操作 1 1 1,且每个操作最多被除一次,即保证 x x x 在任何时候都是一个整数。操作后,输出 x x x mod \text{mod} mod 取模的值。

【思路】: \color{blue}{\text{【思路】:}} 【思路】: 直接模拟会因为爆 long long 的问题导致代码非常复杂,甚至无法编写。

考虑强大的数据结构——线段树。建立一棵线段树,其叶子节点都是对于的乘数,每个非叶子节点的值为其左右儿子的值的乘积对 mod \text{mod} mod 取模的值。这样,任意时候都有 x = x= x= 该线段树的根的值。

操作 1 1 1 可以直接上,操作 2 2 2 可以看做是把第 t t t 次的乘数改为 1 1 1。因此,我们只需要打一个线段树修改即可。

【 代 码 】 : \color{blue}{【代码】&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值