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

Atcoder TUPC 2023(東北大学プログラミングコンテスト 2023)E. And DNA(矩阵快速幂+拆位讨论)

题目

长为n(3<=n<=1e9)的数组,第i个数ai在[0,m](m<=1e9)之间

对于i∈[1,n],均满足a[i]+(a[i-1]&a[i+1])=m,求这样可能的数组的方案数

特别地,认为a[0]=a[n],a[n+1]=a[1],即这个数组是个环形的数组

思路来源

官方题解

题解

从末位考虑,

1. 如果m=0,只能全是0,方案数为1

2. 如果m=1,由于1+(1&1)=2,0+(0&x)=0,所以不能有三个1相邻,不能有两个0相邻

将相邻位的数字每两个看成一个点,即从01/10/11出发,

01可以转移到10或11,11可以转移到10,10只能转移到01,矩阵快速幂求出长为n的方案数

3. 如果m为>=2的偶数,考虑末位是1还是0,

①如果是1,只能是1+(1&1)=2,此时还给倒数第二位贡献了1,需要再递归求m/2-1的方案

②如果是0,只能是全0,需要再递归求m/2的方案

有f(m)=f(m/2)+f(m/2-1)

4. 如果m为>=3的奇数,末位只能是1,并且由于没有进位,可以分开来看

有f(m)=f(1)+f((m-1)/2)

代码

#include <bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<vector>
#include<map>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
typedef long long ll;
typedef double db;
typedef pair<int,int> P;
#define fi first
#define se second
#define pb push_back
#define dbg(x) cerr<<(#x)<<":"<<x<<" ";
#define dbg2(x) cerr<<(#x)<<":"<<x<<endl;
#define SZ(a) (int)(a.size())
#define sci(a) scanf("%d",&(a))
#define pt(a) printf("%d",a);
#define pte(a) printf("%d\n",a)
#define ptlle(a) printf("%lld\n",a)
#define debug(...) fprintf(stderr, __VA_ARGS__)
using namespace std;
using namespace std;
typedef long long ll;
const int N=1e5+10,mod=998244353;
struct mat {static const int MAXN=3;ll c[MAXN][MAXN];int m, n;mat(){memset(c, 0, sizeof(c));m=n=MAXN;}mat(int a, int b) : m(a), n(b) {memset(c, 0, sizeof(c));}void clear(){memset(c, 0, sizeof(c));}mat operator * (const mat& temp) {mat ans(m, temp.n);for (int i = 0; i < m; i ++)for (int j = 0; j < temp.n; j ++){for (int k = 0; k < n; k ++){ans.c[i][j] += c[i][k] * temp.c[k][j];ans.c[i][j]%=mod;}}return ans;}mat operator ^(ll n){mat M(*this),ans(M.m, M.m);for (int i = 0; i < M.m; i ++)ans.c[i][i] = 1;while (n > 0) {if (n & 1) ans = ans * M;M = M * M;n >>= 1;}return ans;}
}b;
//01 10 11 没有相邻两个0或者三个1的方案数
int n,m,ans;
int sol(int m){if(m==0)return 1;//全0if(m==1)return ans;if(m%2==0)return (sol(m/2)+sol(m/2-1))%mod;//进位和不进位return 1ll*ans*sol(m/2)%mod;
}
int main(){scanf("%d%d",&n,&m);b.c[0][1]=b.c[0][2]=1;//01->10 01->11b.c[1][0]=1;//10->01b.c[2][1]=1;//11->10b=b^n;rep(i,0,2){ans=(ans+b.c[i][i])%mod;}printf("%d\n",sol(m));return 0;
}

相关文章:

Atcoder TUPC 2023(東北大学プログラミングコンテスト 2023)E. And DNA(矩阵快速幂+拆位讨论)

题目 长为n(3<n<1e9)的数组&#xff0c;第i个数ai在[0,m](m<1e9)之间 对于i∈[1,n]&#xff0c;均满足a[i](a[i-1]&a[i1])m&#xff0c;求这样可能的数组的方案数 特别地&#xff0c;认为a[0]a[n],a[n1]a[1]&#xff0c;即这个数组是个环形的数组 思路来源 官…...

Matlab/simulin光伏发电直流串联故障电弧模型仿真

参考文献 模型复现...

4款实用性前端动画特效分享(附在线演示)

分享4款非常不错的项目动画特效 其中有jQuery特效、canvas特效、CSS动画等等 下方效果图可能不是特别的生动 那么你可以点击在线预览进行查看相应的动画特效 同时也是可以下载该资源的 全屏图片视差旋转切换特效 基于anime.js制作全屏响应式的图片元素布局&#xff0c;通过左…...

LeetCode -- 76. 最小覆盖子串

1. 问题描述 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 “” 。 注意&#xff1a; 对于 t 中重复字符&#xff0c;我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量…...

【进阶五】Python实现SDVRP(需求拆分)常见求解算法——蚁群算法(ACO)

基于python语言&#xff0c;采用经典遗传算法&#xff08;ACO&#xff09;对 需求拆分车辆路径规划问题&#xff08;SDVRP&#xff09; 进行求解。 目录 往期优质资源1. 适用场景2. 代码调整3. 求解结果4. 代码片段参考 往期优质资源 经过一年多的创作&#xff0c;目前已经成熟…...

php.exe运行时,提示缺少VCRUNTIME140.dll

php.exe运行时&#xff0c;提示缺少VCRUNTIME140.dll 下载地址 https://www.microsoft.com/zh-cn/download/details.aspx?id48145根据需要选择下载3.运行安装后&#xff0c;再次运行php.exe。...

Android垃圾回收机制

1.垃圾回收机制 垃圾回收&#xff0c;也叫GC(Garbage Collection)&#xff0c;指的是释放垃圾占用的空间&#xff0c;防止内存泄露。有效的使用可以使用的内存&#xff0c;对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收。 JVM的内存区域主要分为程序计数器、虚…...

深度学习专家学习计划

深度学习专家学习计划 一、学习背景与目标 作为一名有6年工作经验的Java开发人员,您已具备基本的编程能力和数据处理经验。现计划转岗至深度学习领域,成为深度学习专家。本计划将结合您的工作背景和现有知识,为您制定详细且精确的学习计划,帮助您逐步达到专家水平。 二、…...

关于Ubuntu虚拟机突然上不了网的问题

今天刚重新把Ubuntu虚拟机下回来准备大干一场&#xff0c;结果去吃饭回来虚拟机就上不去网了&#xff0c;具体体现为右上角没有网络的图标&#xff0c;下图是有网络的情况&#xff0c;废话不多说&#xff0c;直接给出解决方案&#xff1a;博客在此 我就是运行了这三行代码就成功…...

[mysql必备面试题]-InnoDB和MyISAM引擎的区别

InnoDB 是 MySQL 默认的事务型存储引擎&#xff0c;只有在需要它不支持的特性时&#xff0c;才考虑使用其它存储引擎。 实现了四个标准的隔离级别&#xff0c;默认级别是可重复读(REPEATABLE READ)。在可重复读隔离级别下&#xff0c;通过多版本并发控制(MVCC) 间隙锁(Next-K…...

android 播放rtsp流的三种方式,2024阿里Android高级面试题总结

使用SurfaceViewMediaPlayer <SurfaceView android:id“id/surface_view” android:layout_width“250dp” android:layout_height“250dp” app:layout_constraintRight_toRightOf“parent” app:layout_constraintTop_toTopOf“parent” /> private String uri …...

unity显示当前时间

1建立文本组件和一个空对象 2创建一个脚本并复制下面代码 using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine;public class showtime: MonoBehaviour {public TextMeshProUGUI time;private void Update(){string currentTime Sy…...

SDK报错(1)undefined reference to `f_mount‘

利用SDK读取sd卡时&#xff0c;添加了xilffs库&#xff0c;而且包含了ff.h头文件&#xff0c;还是对fat库的函数报错 网上有的说在ARM v7 gcc linker中添加xilffs的方法可以解决&#xff0c;但我试了没有用 最后在赛灵思论坛找到了一个解决方法&#xff0c;原文连接如下 在SDK…...

YOLOv8_pose-Openvino和ONNXRuntime推理【CPU】

纯检测系列&#xff1a; YOLOv5-Openvino和ONNXRuntime推理【CPU】 YOLOv6-Openvino和ONNXRuntime推理【CPU】 YOLOv8-Openvino和ONNXRuntime推理【CPU】 YOLOv7-Openvino和ONNXRuntime推理【CPU】 YOLOv9-Openvino和ONNXRuntime推理【CPU】 跟踪系列&#xff1a; YOLOv5/6/7-O…...

百科 | 光伏电站如何开展运维工作?

从目前太阳能光伏电站的运行管理工作实际经验看&#xff0c;要保证光伏发电系统安全、经济、高效运行&#xff0c;必须建立规范和有效的管理机制&#xff0c;特别是要加强电站的运行维护管理。 一、建立完善的技术文件管理体系 对每个电站都要建立全面完整的技术文件资料档案…...

监听抖音直播间的评论并实现存储

监听抖音直播间评论&#xff0c;主要是动态监听dom元素的变化&#xff0c;如果评论是图片类型的&#xff0c;获取alt的值 主要采用的是MutationObserver&#xff1a;https://developer.mozilla.org/zh-CN/docs/Web/API/MutationObserver index.js如下所示:function getPL() {…...

一体机电脑辐射超标整改

电脑一体机是目前台式机和笔记本电脑之间的一个新型的市场产物&#xff0c;它将主机部分、显示器部分整合到一起的新形态电脑&#xff0c;该产品的创新在于内部元件的高度集成。随着无线技术的发展&#xff0c;电脑一体机的键盘、鼠标与显示器可实现无线链接&#xff0c;机器只…...

重学SpringBoot3-路径匹配机制

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-路径匹配机制 AntPathMatcherPathPatternParser 和 PathPattern演示AntPathMatcher 示例PathPattern 示例性能和精确度的提升 选择使用哪一种 在 Spring…...

【贪心算法】摆动序列

如果连续数字之间的差严格地在正数和负数之间交替&#xff0c;则数字序列称为 摆动序列 。第一个差&#xff08;如果存在的话&#xff09;可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。 例如&#xff0c; [1, 7, 4, 9, 2, 5] 是一个 摆动序列 &…...

Unload-labs

function checkFile() {var file document.getElementsByName(upload_file)[0].value;if (file null || file "") {alert("请选择要上传的文件!");return false;}//定义允许上传的文件类型var allow_ext ".jpg|.png|.gif";//提取上传文件的类…...

AI调用BurpSuite实现可审计漏洞检测闭环

1. 这不是“AI安全工具”的营销话术&#xff0c;而是一套可落地的漏洞发现流水线最近帮一家做金融SaaS的客户做渗透测试流程优化&#xff0c;他们原来的方案是&#xff1a;每周安排2名中级渗透工程师&#xff0c;用BurpSuite手动跑一遍核心业务流&#xff0c;再人工翻看Proxy历…...

Unity ShaderGraph环境搭建:URP配置与节点库激活指南

1. 这不是“装个插件就完事”的 ShaderGraph 入门很多人点开 Unity 官方文档里那句“Shader Graph is included with Unity 2019.1”就直接关掉页面&#xff0c;以为只要打开 Unity 就能拖拽节点写 Shader——结果新建一个 Shader Graph Asset&#xff0c;双击打开&#xff0c;…...

洛雪音乐音源终极指南:如何免费获取全网高品质音乐资源

洛雪音乐音源终极指南&#xff1a;如何免费获取全网高品质音乐资源 【免费下载链接】lxmusic- lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 你是否厌倦了在各个音乐平台之间切换&#xff0c;只为寻找一首高品质的音乐&…...

基于Intel Core处理器的高性能嵌入式系统定制开发实战指南

1. 项目概述与核心价值最近几年&#xff0c;嵌入式系统的边界被不断拓宽&#xff0c;从传统的工业控制到边缘计算、智能零售&#xff0c;对核心处理单元的要求也越来越高。单纯追求低功耗或极致成本&#xff0c;在很多场景下已经不够用了。我们常常需要在紧凑的空间里&#xff…...

差点把用户数据泄漏给Claude Code后,我写了个 Rust 工具

两周前&#xff0c;我把公司的数据库接进了Claude Code&#xff0c;效率确实起飞了&#xff0c;直到我翻了一下会话记录。 两周前 公司的 PostgreSQL 数据库接进了Claude Code以后&#xff0c;AI 确实能干——帮我写迁移、联表、生成报表&#xff0c;效率直接起飞。 直到我随…...

为什么82%的保险AI Agent项目卡在POC阶段?一线技术总监首度公开6个致命设计盲区

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;为什么82%的保险AI Agent项目卡在POC阶段&#xff1f; 保险行业正加速拥抱AI Agent技术&#xff0c;但据2024年《亚太保险科技落地白皮书》统计&#xff0c;82%的AI Agent项目在概念验证&#xff08;POC&…...

终极指南:如何用Word Checker轻松实现中英文拼写自动纠正

终极指南&#xff1a;如何用Word Checker轻松实现中英文拼写自动纠正 【免费下载链接】word-checker &#x1f1e8;&#x1f1f3;&#x1f1ec;&#x1f1e7;Chinese and English word spelling corrector.(中文易错别字检测&#xff0c;中文拼写检测纠正。英文单词拼写校验工具…...

Midjourney颗粒质感调控全链路拆解(RAW模式下PSD分层修复实录+颗粒频谱分析图谱)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney颗粒质感调控全链路拆解&#xff08;RAW模式下PSD分层修复实录颗粒频谱分析图谱&#xff09; 在 RAW 模式下启用 Midjourney v6.1 的 --raw 参数可绕过默认后处理管线&#xff0c;保留原始噪…...

7. 线程编程(线程概念和创建)

线程的创建 #include <pthread.h> int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*routine)(void *), void *arg); 成功返回0&#xff0c;失败时返回错误码 thread 线程对象 attr 线程属性&#xff0c;NULL代表默认属性 routine 线程执行…...

2026年5月21隔夜暗盘挂单排行榜

推荐好文:每年节约五六千交易费不香吗如何获取龙虎榜是否有量化参与如何获取股东减持信息大A有5400多只股票, 这里面只有不到10%, 约500只由资金投票, 剩余的都是杂毛, 炒股看龙头找主线. 从隔夜挂单里选择, 再叠加我们之前分享的如何判断是否有大股东减持, 是否有融资融券参与…...