当前位置: 首页 > news >正文

补题:K - Magic Tree (Gym - 105231K)

来源:问题 - K - Codeforceshttps://codeforces.com/gym/105231/problem/K

题目描述:

 
 一、题目分析
 
本题给定一个2行m列的网格,从(1, 1)格子开始进行深度优先搜索,每个格子可到达至少一个边相邻的格子且不重复访问,要求计算所有可能的标记树(用边集E表示 )的数量,并对998244353取模输出。
 
二、解题思路
 
找规律:通过对小数据情况(如m = 1, 2, 3等 )进行手动模拟深度优先搜索过程,分析不同m值下标记树的数量。可以发现其数量满足一定的规律,经过归纳推理可得,对于列数为m的网格,标记树的数量为2^{m - 1} 。
 
快速幂计算:因为m的范围较大,直接计算2^{m - 1}会超时,所以采用快速幂算法来高效计算幂次方。快速幂算法的核心思想是利用二进制的性质,将指数b转化为二进制形式,通过不断平方底数a ,并根据指数二进制位的情况累乘结果,从而计算出a^b 。
 
三、代码实现(C++)
 

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod = 998244353;
// 快速幂函数
int kksuu(int a, int b, int m) {int s = 1;while (b > 0) {if (b % 2 == 1) {s = s * a;s = s % m;}b = b / 2;a = a * a;a = a % m;}return s;
}signed main() {int n;cin >> n;n = n - 1;int t = kksuu(2, n, mod);cout << t << endl;return 0;
}

四、复杂度分析
 
时间复杂度:快速幂函数 kksuu 的时间复杂度为O(\log n) ,其中n为指数,这里指数最大为10^6 ,相比于直接计算幂次方的O(n)时间复杂度有大幅优化,在本题数据规模下可以高效计算。
 
空间复杂度:程序中除了输入数据外,使用的额外空间主要是几个变量(如函数中的临时变量 a  、 b  、 s 等 ),空间复杂度为O(1) 。

相关文章:

  • SpringBoot研究生双选系统开发实现
  • Rust中避免过度使用锁导致性能问题的策略
  • C# | 基于C#实现的BDS NMEA-0183数据解析上位机
  • 详解TypeScript中的类型断言及其绕过类型检查机制
  • Python 从入门到精通3 控制结构
  • 深度学习基础--目标检测入门简介
  • 软件工程国考
  • 使用Python和Pandas实现的Azure Synapse Dedicated SQL pool权限检查与SQL生成用于IT审计
  • PyTorch 与 TensorFlow:深度学习框架的深度剖析与实战对比
  • 等保系列(一):网络安全等级保护介绍
  • 第四章 Maven
  • 世纪华通:从财报数据看其在游戏领域的成功与未来
  • 3D版同步帧游戏
  • PyTorch中“原地”赋值的思考
  • GPU虚拟化实现(六)
  • 线段树原理和代码详解
  • 课题推荐——通信信号处理中的非线性系统状态估计(如信号跟踪、相位恢复等场景),使用无迹卡尔曼滤波(UKF)的非线性滤波算法,MATLAB实现
  • 【C++重载操作符与转换】输入和输出操作符
  • 深入解析Session与Cookie:从HTTP无状态到现代会话管理
  • 【kafka系列】消费者组
  • 乘客被困停滞车厢超4小时,哈尔滨铁路局客服:列车晚点,表示歉意
  • 韩代总统李周浩履职
  • 特朗普称加总理将很快访美,白宫:不影响将加拿大打造成“第51个州”计划
  • 新华时评:防范安全事故须臾不可放松
  • 先去上海后赴北京,苏中城市泰州为何接连拥抱顶流“大城”?
  • 万科:一季度营收近380亿元,销售回款率超100%