首页 > 其他分享 >UOJ#884. 【UR #27】509 号迷宫

UOJ#884. 【UR #27】509 号迷宫

时间:2024-05-31 13:33:10浏览次数:18  
标签:27 cout 884 int UR 对线 509 UOJ

有一个显然的 \(\mathcal O(n^2)\) DP。

考虑利用组合数优化,只在满足纵坐标 \(y | p\) 的位置记录状态并转移。

有障碍,需要做容斥。

四种转移:线对线、点对点、线对点、点对线

组合计数算明白了就简单了。

代码

#include <bits/stdc++.h>

using namespace std;

constexpr int N = 254500 + 10, MOD = 509, M = MOD + 10;

int n, a[N], f[M][M], c[M][M], fl[N], fr[N], g[N];

// c[n][m] -> C(n + m, m)

int main() {
    ios_base::sync_with_stdio(0); cin.tie(nullptr), cout.tie(nullptr);
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i];
    if (a[n] == n) {cout << 0; return 0;}
    for (int i = 0; i < MOD; i++) c[i][0] = c[0][i] = 1;
    for (int i = 1; i < MOD; i++) {
        for (int j = 1; j < MOD; j++) c[i][j] = (c[i - 1][j] + c[i][j - 1]) % MOD;
    }
    fill(fl, fl + n + 1, 1);
    for (int l = 0, r = MOD; r <= n; l += MOD, r += MOD) {
        // line to line
        for (int i = MOD; i <= n; i++) fl[i] = (fl[i] + fl[i - MOD]) % MOD;
        for (int i = l + 1; i <= r; i++) {
            // point to point
            for (int j = l + 1; j < i; j++) if (a[j] <= a[i]) {
                g[i] += g[j] * c[i - j][(a[i] - a[j]) % MOD];
            }
            // line to point
            int lim = min(a[i], MOD - (i - l));
            for (int j = 0; j <= lim; j++) g[i] += fl[a[i] - j] * c[i - 1 - l][j];
            g[i] = (MOD - g[i] % MOD);
        }
        // point to line
        for (int i = l + 1; i <= r; i++) {
            int lim = min(n - a[i], MOD - (r - i + 1));
            for (int j = 0; j <= lim; j++) fr[a[i] + j] += g[i] * c[r - i][j];
        }
        for (int i = MOD; i <= n; i++) fr[i] += fr[i - MOD];
        for (int i = 0; i <= n; i++) fl[i] = (fl[i] + fr[i]) % MOD;
        fill(fr, fr + n + 1, 0);
    }
    cout << fl[n] << '\n';
    return 0;
}

标签:27,cout,884,int,UR,对线,509,UOJ
From: https://www.cnblogs.com/chy12321/p/18224361

相关文章

  • 「杂题乱刷」P8279
    链接(Link)一个好题。就是说,你直接先求出这个数列的异或和,然后发现之后就可以两两匹配,如果无法匹配就默认这个数为\(0\),然后做完了。点击查看代码/*Tips:你数组开小了吗?你MLE了吗?你觉得是贪心,是不是该想想dp?一个小时没调出来,是不是该考虑换题?打cf不要用umap!!!记住......
  • 如何通过管道使用 yaml 将 Azure 库变量传递给 Cypress?
    我希望将Azure库中的变量传递给cypress,这样我就可以拥有多个阶段(暂存&生产)我尝试了以下方法:通过一个名为environment.json的文件使用固定装置,该文件看起来像这样:{WEB_APP_BASE_URL":"https://blight-town.com"//像我这样的迷失者的"默认"URL}在Azure中,我有一个包......
  • SpringSecurity权限验证
    目录我们先用默认的一个访问拦截页面第二种,我们可以自己写一个登录的页面,也就是没有权限被拦截之后的登录页面我们先用默认的一个访问拦截页面首先先加入我们的Security的一个依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>s......
  • [数据结构+二叉树+B-Tree和红黑树与B+Tree与hashMap原理+ concurrentHashMap的原理]析
    目录数据结构:你了解过哪些数据结构:这些数据结构的优缺点:二叉树:特点:二叉树适合做磁盘存储吗: 缺点:B-Tree:b-树的查找过程:思考:特点:B+Tree: B+树搜索过程与B树的查询过程没有区别。但实际上有三点不一样:(B+Tree优势)简述B+Tree:不经历IO的情况下,可以直接......
  • pip is configured with locations that require TLS/SSL, however the ssl module in
     [root@dsc1mydjango]#pip3installdjangopipisconfiguredwithlocationsthatrequireTLS/SSL,howeverthesslmoduleinPythonisnotavailable.CollectingdjangoRetrying(Retry(total=4,connect=None,read=None,redirect=None,status=None))after......
  • Cesium 中 GeoJsonDataSource 贴地不生效的问题
    Cesium中GeoJsonDataSource可以设置clampToGround为true来确保其贴地,但有时会出现不生效的情况。可能有以下几个原因:数据源不是地理坐标系(WGS84):如果数据源不是基于WGS84坐标系的,则可能无法正确地将图形贴到地球表面。确保你的数据源使用正确的坐标系。数据源中的图形高......
  • 探秘AI艺术:揭开Midjourney绘画的神秘面纱
    在当今这个数字化迅速发展的时代,AI技术已经深入到我们生活的方方面面,而最令人着迷的莫过于它在艺术创作领域的应用。“Midjourney绘画”就是这样一个令人惊叹的例子,它通过高级AI技术,能够帮助用户生成独一无二的艺术作品。但是,你有没有想过,“Midjourney绘画”是如何实现的呢?本文......
  • tauri 打包nextjs
    问题1:页面无法打开localhost:报错提示:嗯…无法访问此页面tauri.localhost 已拒绝连接。解决:next.config.js/**@type{import('next').NextConfig}*/constnextConfig={output:'export',}module.exports=nextConfig 问题2:tauri在build模式开启右键检查de......
  • GEE 27 高级栅格可视化 Advanced Raster Visualization(Part6)
    Overview ThischaptershouldhelpusersofEarthEnginetobetterunderstandrasterdatabyapplyingvisualizationalgorithmssuchashillshading,hillshadows,andcustomcolormaps.Wewillalsolearnhowimagecollectiondatasetscanbeexploredbyani......
  • Azure DevOps Server 2022.2(升级过程)
    1.概述2.前期准备3.升级过程4.验证成果1.概述本月微软公司发布了AzureDevOpsServer2022的第二个升级包Update2https://learn.microsoft.com/en-us/azure/devops/server/release-notes/azuredevops2022u2。自2024年3月12日发布AzureDevOpsServer2022Update1(《微软发......