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

停停,昨日请不要再重现(2022南京区域赛)题解

核心思路

  1. 无坑时剩余袋鼠数cnt
    模拟一只袋鼠的移动轨迹,得到最终偏移量(dx, dy)。初始位置(i,j)的袋鼠能存活 ⇔ (i+dx, j+dy)仍在网格内,遍历所有格子统计即可。

  2. 计算每个位置被经过的次数cnt1
    用一只袋鼠模拟移动,记录所有经过的相对坐标(去重)

对每个相对坐标(px,py),所有初始位置(i,j)满足(i+px, j+py)在网格内的都会被经过一次

用二维差分快速标记:给矩形[1-px, n-px] × [1-py, m-py]加1

  1. 统计答案
    坑放(i,j)时,掉入袋鼠数为cnt1[i][j],剩余袋鼠数为cnt - cnt1[i][j]
    满足 cnt - cnt1[i][j] == k 的位置即为答案

复杂度分析:

模拟路径:O(|s|)

路径去重:O(|s| log |s|)

二维差分:O(|path|),其中 |path| 是路径中不同坐标数,最多 |s|+1

前缀和与统计:O(nm)

总复杂度:O(nm + |s| log |s|),可以承受。

#include <bits/stdc++.h>
using ll = long long;
using namespace std;
const ll N = 1e5 + 10, mod = 998244353, inf = 0x3f3f3f3f3f3f3f3f;
ll n, idx, m, k;
string s;
void solve() {cin >> n >> m >> k >> s;ll le = 0, ri = 0, down = 0, up = 0, x = 0, y = 0;for (auto i : s) {//找没有出界的那一部分袋鼠 找上下左右最大值if (i == 'U') {x--;} else if (i == 'D') {x++;} else if (i == 'R') {y++;} else if (i == 'L') {y--;}le = max(le, -y);ri = max(ri, y);up = max(up, -x);down = max(down, x);}ll l = le + 1;ll r = m - ri;ll u = up + 1;ll d = n - down;if (l > r || d < u) {//判断是否无解if (k == 0) {cout << n * m << '\n';} else {cout << 0 << '\n';}return;}s = ' ' + s;x = u, y = l;ll lenx = d - u + 1;ll leny = r - l + 1;ll cnt = lenx * leny;map<int, map<int, int>> vis;vector<vector<int>> t(n + 5, vector(m + 5, 0)), dd(n + 5, vector(m + 5, 0));for (auto i : s) {if (i == 'U') {x--;} else if (i == 'D') {x++;} else if (i == 'R') {y++;} else if (i == 'L') {y--;}if (vis[x][y]) continue;//如果标记过就不用再标记了vis[x][y] = 1;dd[x][y]++;//二维差分dd[x][y + leny]--;dd[x + lenx][y]--;dd[x + lenx][y + leny]++;}ll ans = 0;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {t[i][j] = t[i - 1][j] + t[i][j - 1] - t[i - 1][j - 1] + dd[i][j];//二维前缀和// cout << t[i][j] << ' ';if (t[i][j] == cnt - k) ans++;}// cout << '\n';}cout << ans << '\n';
}
int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int _ = 1;cin >> _;while (_--) {solve();}return 0;
}
http://www.jsqmd.com/news/418295/

相关文章:

  • 爬虫数据备份与多地同步方案
  • 主流IM SDK对比
  • Vite 依赖优化深度解析
  • 企业如何借力AI搜索获客?2026年DeepSeek推广服务商能力图谱解析 - 品牌2025
  • AI获客困局如何破局?2026年DeepSeek推广服务商全景解析 - 品牌2025
  • 【Azure Redis】在Azure Cache for Redis上试验monitor指令效果
  • [US Army] Eric Slover
  • 实战教程:Windows下Dify+Ollama环境搭建,小白也能轻松上手!
  • 【Web安全006篇---基本概念001---】渗透测试流程(PTES)系列
  • 【Web安全005篇---基本概念001---】渗透测试流程(PTES)系列
  • Paperxie 论文查重:不止是降重,更是学术诚信的智能守护者
  • 当查重遇上AI检测:paperxie成为新一代学术人的“双重通关“指南
  • 细胞膜标记专家:iFluor 488标记的小麦胚芽凝集素;iFluor 488 WGA
  • 《认知度规入门篇:为什么我们要用几何来衡量思考》
  • 基于Python+Flask+Vue的音乐信息可视化推荐系统 |(ItemCF/UserCF+LSTM+Echarts)大数据 人工智能
  • 毕设选题不再愁!Spring Boot 3.5 + Vue3 + UniApp 三端全栈项目,14 大模块随你选
  • 基恩士KV系列轴控制FB模板:5种定位单元适配,功能齐全且带详细说明文档
  • 周海冰与捷品汇,共创电商新体验! - 资讯焦点
  • IF488 WGA;iFluor 488标记的小麦胚芽凝集素(WGA)应用盘点
  • Qt的布局控件
  • Qt 布局引擎
  • 【关于虚拟无电池与充电保护两种模式的理解】
  • 扫描线优化 DP 与单调队列优化 DP
  • 网易云音乐数据分析系统 | Flask+Echarts+Python爬虫+HTML可视化分析 毕业设计源码 深度学习 大数据 人工智能
  • Vite 生产构建(Rollup)深度解析
  • 音乐信息可视化推荐系统 | Python+Flask+Vue+Scrapy+LSTM+Echarts 大数据 人工智能 deepseek 深度学习 毕业设计源码
  • WinRAR解压的临时文件藏在哪?一文告诉你默认路径与查看方法
  • 六氟化硫气体检测仪在电力生产端的预防性应用 - 资讯焦点
  • 用pytorch来自动求导
  • 网易云音乐信息采集可视化分析系统 | 技术栈Flask+Echarts 多模块全流程实现 毕业设计源码 deepseek 人工智能 深度学习