1013 Div3 F题目加注释

https://codeforces.com/contest/2091/problem/F


这题主题思路就是递推,从下往上递推,然后用差分和前缀合得到下一行可能性,详细看代码注释

点击查看代码
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
const int MOD = 998244353;//模数
const int N = 2222;//图的最大范围
int dp[N][N][2];//dp每个点有两种状态
string str[N];void solve(){int n,m,d;cin>>n>>m>>d;//获取范围和最大距离for(int i = 1;i<=n;++i){for(int j = 1;j<=m;++j){dp[i][j][0] = dp[i][j][1] = 0;//初始化dp}}for(int i = n;i>=1;--i){string s;cin>>s;str[i] = "0"+s;//存储从下到上的点,然后位置从1开始}for(int j = 1;j <= m;++j){//遍历最下面的一行,找到可攀岩点记录为1if(str[1][j]=='X')dp[1][j][0]=1;//第一层每个点有攀岩的地方初始为一}for(int i = 1;i<=n;++i){	//从上到下开始每行遍历for(int j = 1;j<=m;++j){if(str[i][j]=='#')continue;//如果是不可攀岩点就跳过int l = max(1,j-d),r = min(m,j+d);//l找欧拉距离内最左边的点,r同理找最右点,为当前点最左和最右dp[i][l][1] = (dp[i][l][1] + dp[i][j][0])%MOD;//该点最左边出点为该入点的可能性和(这里用差分)dp[i][r+1][1] = (dp[i][r+1][1] - dp[i][j][0] + MOD)%MOD;//该点最右边出点为该入点的可能性和}for(int j = 1;j <= m;++j)dp[i][j][1] = (dp[i][j][1] + dp[i][j-1][1])%MOD;//前缀和if(i==n)continue;//如果到最后一行就跳过for(int j = 1;j <= m;++j){//再遍历当前行的每个点int len = d*d-1;//欧拉距离*欧拉距离-1len = sqrt(len);//长度的平方。(这里是勾股定理,d是斜边)int l = max(1,j-len),r = min(m,j+len);//获取该点最左边和最右边if(str[i][j]=='#')continue;//如果没攀点就跳过可能性的合并dp[i+1][l][0] = (dp[i+1][l][0] + dp[i][j][1])%MOD;//该点最左边的距离的下一层加上这个点的可能性(差分)dp[i+1][r+1][0] = (dp[i+1][r+1][0] - dp[i][j][1] + MOD)%MOD;//最右边的点减去这个点的可能性(差分)}for(int j = 1;j<=m;++j)dp[i+1][j][0] = (dp[i+1][j][0] + dp[i+1][j-1][0])%MOD;//前缀和合并下一层可能性}ll ans = 0;for(int j = 1;j<=m;++j){if(str[n][j] == 'X')ans = (ans + dp[n][j][1])%MOD;//有最后一层有盘点的加入可能性里面}cout<<ans<<endl;//总结,主体思路用差分来更新欧拉距离最左和最右端,然后前缀和得到每层可能性(先不管他有没有攀点)最后再遍历最上面//判断没有攀点的就合并可能性
}
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);ll t=1;cin>>t;while(t--){solve();}return 0;
}

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

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

相关文章

20244319 实验二《Python程序设计》实验报告

20244319 2024-2025-2 《Python程序设计》实验二报告 课程:《Python程序设计》 班级: 2443 姓名: 梁悦 学号:20244319 实验教师:王志强 实验日期:2025年3月26日 必修/选修: 公选课 一、实验内容 1.设计并完成一个完整的计算机应用程序,完成加、减、乘、除、log等运算,…

让 LLM 既能“看”又能“推理”!

DeepSeek-R1 会推理,GPT-4o 会看。能否让 1 LLM既能看又能推理? DeepSeek-R1取得很大成功,但它有个问题——无法处理图像输入。 1.1 DeepSeek模型发展 自2024.12,DeepSeek已发布:DeepSeek-V3(2024.12):视觉语言模型(VLM),支持图像和文本输入,类似 GPT-4o DeepSeek-…

WindowsPE文件格式入门03.节表

https://www.bpsend.net/thread-306-1-1.html dump 我们点击运行程序进程加载时时,是把文件里面的数据映射进内存,这样进程里面的内存就拿到了各种各样的代码,数据等资源,但是如果我们反着来,就可以从进程的内存里把 exe 文件提出来,这个过程叫做dump过程 dump过程在对抗里面经…

7-二次、加解密、DNS等注入

加解密注入其实就是数据被加密了,注入的时候要先把注入语句进行相应加密再注入,只是叠加了一次加密而已二次注入二次注入一般用于白盒测试,黑盒测试就算是找到注入也没办法攻击 二次注入无法通过工具或手工发现,只能观察源代码才能发现 一般产生在有数据互联的情况,比如有…

8-WAF绕过

WAF WAF部署安全狗,宝塔等waf搭建部署 https://blog.csdn.net/nzjdsds/article/details/93740686 流量防护:某ip访问过多入黑名单 建议阿里云搞个服务器部署进行绕过测试WAF常见功能总体来说,WAF(Web Application Firewall)的具有以下四个方面的功能:审计设备:用来截获所有…

一个基于 .NET 开源免费的异地组网和内网穿透工具

前言 今天大姚给大家分享一个基于 .NET 开源免费的异地组网和内网穿透工具:linker。 工具介绍 linker是一个基于 .NET8 开源免费(GPL-2.0 license)的异地组网和内网穿透工具,支持TCP(支持IPV6)打洞、UDP打洞,服务器中继,异地组网使用虚拟网卡将各个客户端组建为局域网络、…

还是继续写博客吧!作为留痕、作为给面试官了解我的资料。

今天我被约谈了,没错,说的是“毕业”的事情 今天下午三点的时候,我接到了一个工单,我很纳闷,这是一个很简单且稳定运行了几年的东西,怎么有问题了?这个系统我太熟悉了,简单看下日志,便发现了问题所在——用户信息上的关键标识缺失,导致了某个接口查询无结果。我赶紧联…

SvelteKit 最新中文文档教程(12)—— 高级路由

前言 Svelte,一个语法简洁、入门容易,面向未来的前端框架。 从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1:Svelte 以其独特的编译时优化机制著称,具有轻量级、高性能、易上手等特性,非常适合构…

代码随心录第一天|Leecode (704二分查找、27移除元素、977有序数组的平方

Leecode 704二分查找 题目链接:https://leetcode.cn/problems/binary-search/ 题目描述 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。题目解法 思路: 题目前提是数组为有序…

Linux输出重定向全攻略:掌握命令行高效管理的艺术

概述 在Linux中,输出重定向是一种将命令的输出(标准输出或标准错误)重定向到文件或其他设备的方法。以下是一些常见的输出重定向操作符及其用法:标准输出重定向 (>)将命令的标准输出重定向到一个文件中。如果文件不存在,它会被创建;如果文件已经存在,它会被覆盖。 co…

XN2025 集训记录 D6

梦境是一个微妙的境界 , 空寂感与包裹感交织 , 哪些景象明明永远不可能出现在现实 , 却像家一样 . . . 温暖 . . . 熟悉XN2025 集训记录 D6 今天西安也降温了 , 一晚上没睡好 , 做了能有三四个梦 . 梦到自己去神秘巨大建筑群集训 , 找不到同桌还没找明白房间 . . . 这都啥跟啥 …