AT_abc388_f Dangerous Sugoroku 题解

太幽默了。

显然可以用矩阵快速幂解决,矩阵里维护距离当前点 \(B\) 以内的所有点可不可达,转移只需分段,在区间内和不在区间内用不同的转移矩阵即可。复杂度 \(O(B^3m\log n)\)

然后你就 T 了。

此时你很急,你现在应该快点卡常来 AK 这场比赛而不是研究其他的做法,于是我们发现快速幂根本不需要,因为有障碍的区间长度 \(\le B\),然后没障碍的区间对应的矩阵乘到 \(400\) 次方左右就全大于 \(0\) 了。可以直接预处理出矩阵的幂。

然后 \(A = B\) 时肯定是没有上面那条性质的,需要特判。能走到 \(n\) 的条件显然是 \(n \bmod B \equiv 1\) 且没有障碍 \(\bmod B \equiv 1\)

然后你就 WA 了。

比赛结束我也没调出来,然后我发现一个重要的事情:

\(B\) 可以等于 \(1\)

就这样寄了。

代码有点乱。

#include<bits/stdc++.h>
typedef long long ll;
#define pii std::pair<ll,ll>
#define mkp std::make_pair
#define fir first
#define sec second
inline void rd(){}
template<typename T,typename ...U>
inline void rd(T &x,U &...args){int ch=getchar();T f=1;x=0;while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+(ch^48),ch=getchar();x*=f;rd(args...);
}
const int N=25;
ll n;int m,A,B;
std::vector<pii> vec;
struct Matrix{int m[N][N],n;int* operator[](int x){return m[x];}Matrix(int _x=0,int _n=B){memset(m,0,sizeof m);n=_n;for(int i=1;i<=n;i++)m[i][i]=_x;}Matrix operator*(Matrix b){Matrix c=Matrix();for(int k=1;k<=n;k++){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){(c[i][j]+=m[i][k]*b[k][j]);}}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++)c[i][j]=(c[i][j]>0);}return c;}
}bas1,bas2,cur,b2[25],b1[405],a1;
signed main(){rd(n,m,A,B);if(A==B){if(B==1)return printf(m?"No":"Yes"),0;int flag=(n%B==1ll);for(int i=1;i<=m;i++){ll l,r;rd(l,r);if(r-l+1>=B)flag=0;else{for(ll j=l;j<=r;j++)if(j%B==1ll)flag=0;}}puts(flag?"Yes":"No");return 0;}ll now=2;for(int i=1;i<=m;i++){ll l,r;rd(l,r);vec.push_back({now,l-1});vec.push_back({l,r});if(r-l+1>=B){puts("No");return 0;}now=r+1;}vec.push_back({now,n});bas1.n=bas2.n=cur.n=B;for(int i=2;i<=B;i++)bas2[i][i-1]=bas1[i][i-1]=1;for(int i=1;i<=B-A+1;i++)bas1[i][B]=1;cur[1][B]=1;b2[1]=bas2;b1[1]=bas1;for(int i=2;i<=B;i++)b2[i]=b2[i-1]*bas2;for(int i=2;i<=400;i++)b1[i]=b1[i-1]*bas1;for(int i=1;i<=B;i++){for(int j=1;j<=B;j++)a1[i][j]=1;}int t=0;for(auto [l,r]:vec){t^=1;if(l>r)continue;if(t)cur=cur*(r-l+1<=400?b1[r-l+1]:a1);else cur=cur*b2[r-l+1];}printf(cur[1][B]?"Yes":"No");return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/868220.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多路复用与多路分解

主机维护一个Socket表,通过表中记录的ipport与socket对应关系进行封装报文,接受到报文时使用报文的ip和port查找对应socket的过程 称为多路复用与多路分解 TCP socket存有本机进程到对端进程的映射关系UDPudp是无连接的,本机ip port没有和对端ip port构成映射关系,udp的soc…

计算机网络-多路复用与多路分解

主机维护一个Socket表,通过表中记录的ipport与socket对应关系进行封装报文,接受到报文时使用报文的ip和port查找对应socket的过程 称为多路复用与多路分解 TCP socket存有本机进程到对端进程的映射关系UDPudp是无连接的,本机ip port没有和对端ip port构成映射关系,udp的soc…

.NET 中管理 Web API 文档的两种方式

前言 在 .NET 开发中管理 Web API 文档是确保 API 易用性、可维护性和一致性的关键。今天大姚给大家分享两种在 .NET 中管理 Web API 文档的方式,希望可以帮助到有需要的同学。 Swashbuckle Swashbuckle.AspNetCore 是一个流行的 .NET 库,它使得在 ASP.NET Core 项目中自动生…

idea设置快捷键

idea设置快捷键 下载安装idea 参考:pyhton、miniConda、pycharm下载安装配置中的pycharm下载安装配置即可,jetbrains系列软件都可如此操作。 查询快捷键 打开安装好的idea, ctrl+alt+s或手动打开Settings/设置, 点击左侧Keymap/按键映射页签, 点击右侧搜索框右侧的放大镜,…

抖音评论生成器在线工具,好评生成器软件,用js+html即可实现

开发技术HTML:用于搭建页面结构。 CSS:用于美化页面样式。 JavaScript:实现核心逻辑,包括文案生成、随机选择、复制功能等。 部分框架代码:<!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name=…

Odoo18.0附件分享管理

需求背景 虽然odoo官方提供了文档的门户访问功能,外部用户可以在门户查看共享的文档和相关的附件。但是某些情况下,我们希望外部用户只能有限地能访问我们指定的附件,而不是能够访问整个文档和全部附件。 本文即是介绍为了解决此问题而开发的功能。 功能介绍 这里我们以销售…

git worktree同一个仓库多个分支并行开发和管理

Git Worktree 是 Git 提供的一个功能,允许你在同一个仓库中同时工作在多个工作目录中,每个目录都有自己的工作树和索引。这对于同时处理多个分支或版本非常有用。介绍 Git Worktree 是 Git 提供的一个功能,允许你在同一个仓库中同时工作在多个工作目录中,每个目录都有自己的…

idea汉化教程,jetbrains系列软件都适用

idea汉化教程,jetbrains系列软件都适用 下载安装idea 参考:pyhton、miniConda、pycharm下载安装配置中的pycharm下载安装配置即可,jetbrains系列软件都可如此操作。 汉化 打开安装好的idea, ctrl+alt+s或手动打开Settings/设置, 点击左侧Plugins/插件页签, 点击右侧Market…

搭建jumpserver堡垒机--基本使用(三)

一.给所有服务器设置只允许jumpserver机器登录(尽量不要操作)1.开放堡垒机ssh登录,xxx.xxx.xxx.xxx对应堡垒机ipiptables -A INPUT -s xxx.xxx.xxx.xxx -p tcp --dport 22 -j ACCEPT2.拒绝所有机器ssh登录iptables -A INPUT -p tcp --dport 22 -j REJECT 二. 配置邮箱和创建用…

【学习笔记】斜率优化 dp

LearningForeword 斜率优化,顾名思义就是用一次函数的单调性来优化 dp,具体表现为利用单调性找到最优决策点从而优化掉需要枚举的决策点。 给斜率优化 dp 总结一个模板: \[dp_{i} = \min\{dp_{j} + calc (i,j)\} \]或者: \[dp_{i} = \max\{dp_{j} + calc (i,j)\} \]其中 \(…

安装MM系统(使用systemback封装Ubuntu系统iso镜像)

哈喽啊亲们!今天又是阳光明媚的一天,不知道亲们想me了没,今天小橘给大家分享一下MM系统镜像的封装流程,欢迎大家一起探讨。一、安装 MM 系统到其他机器的硬盘上 (一) BMC 挂载镜像 设置--一般--媒体重定向设置--一般设置--远程媒体支持--挂载 CD/DVD--填写信息--保存--选择…

【DMSQL系列】 达梦数据库写文件的方式探索

前沿 这篇文章整体算是🧲【DMSQL系列】SQL注入小记 的续集,达梦作为国内优秀的信创数据库,在关基单位中拥有越来越大的用户使用量。 通过SQL注入来写文件一直以来都是SQL注入漏洞深入利用的一种方式,对于不同的数据库通常写文件的方式也是不一样的。 通过笔者的探索发现,…