Ex - Group Photo

很牛的题

设\(A_0=A_{n+1}=INF\),那么对于每个\(B_i\)有\(B_i>\min(A_{i-1},A_i)\),所以考虑设\(C_i\)表示\(min(A_{i-1},A_i)\),那么有\(B_i>C_i\),显然,若我们将\(C\)从小到大排序,\(B\)也从小到大排序,那么肯定是一一对应的(即满足\(B_i>C_i\)时合法)

考虑\(C_i=A_i\)时,说明若我们将\(A\)也从小到大排序后挨个放入序列中,有\(A_i\)比\(A_{i-1}\)先放入序列中,所以设\(dp[i][j]\)表示前\(i\)个\(A\)放成了\(j\)个连通块

首先若我们放了了\(i\)个\(A\),形成了\(j\)个连通块,那么一定有\(i+j\)个\(C\)被确定并且一定是前\(i+j\)个\(C\),那么前\(i+j\)个\(C\)就一一对应了前\(i+j\)个\(B\),所以考虑转移:

将第\(A_{i+1}\)放在每个块的首/尾,\(dp[i][j]\times2\times j\rightarrow dp[i+1][j](A_{i+1}<B_{i+j+1})\)

用\(A_{i+1}\)链接两个连通块,\(dp[i][j]\times (j-1)\rightarrow dp[i+1][j-1]\),因为此时\(A_{i+1}\)两边的\(A\)都比\(A_{i+1}\)先加入,所以\(A_{i+1}\)不会产生新的\(C\)

\(A_{i+1}\)单独新建一个块,\(dp[i][j]\times(j+1)\rightarrow dp[i+1][j+1](A_{i+1}<B_{i+j+1}\&\&A_{i+1}<B_{i+j+2})\),因为\(B\)排了序,所以\(B_{i+j+1}<B_{i+j+2}\),所以只需要判断\(A_{i+1}<B_{i+j+1}\)

#include<bits/stdc++.h>
using namespace std;
const int N=5e3+5,MOD=998244353;
int dp[N][N],n,a[N],b[N];
void add(int &x,int y){ x+=y; (x>=MOD)&&(x-=MOD); (x<0)&&(x+=MOD); }
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i) scanf("%d",&a[i]);
for(int i=1;i<=n+1;++i) scanf("%d",&b[i]);
dp[0][0]=1,sort(a+1,a+n+1),sort(b+1,b+n+2);
for(int i=0;i<n;++i){
for(int j=0;j<=i&&i+j<=n+1;++j){
if(a[i+1]<b[i+j+1]) add(dp[i+1][j],dp[i][j]*2ll%MOD*j%MOD);
if(j>1) add(dp[i+1][j-1],1ll*dp[i][j]*(j-1)%MOD);
if(a[i+1]<b[i+j+1]) add(dp[i+1][j+1],1ll*dp[i][j]*(j+1)%MOD);
}
}
printf("%d",dp[n][1]);
return 0;
}

[abc313 h/ex] Group Photo的更多相关文章

  1. PAT A1109 Group Photo (25 分)——排序

    Formation is very important when taking a group photo. Given the rules of forming K rows with N peop ...

  2. 1109 Group Photo (25 分)

    1109 Group Photo (25 分) Formation is very important when taking a group photo. Given the rules of fo ...

  3. PAT 1109 Group Photo[仿真][难]

    1109 Group Photo(25 分) Formation is very important when taking a group photo. Given the rules of for ...

  4. 1109 Group Photo (25分)

    Formation is very important when taking a group photo. Given the rules of forming K rows with N peop ...

  5. A1109. Group Photo

    Formation is very important when taking a group photo. Given the rules of forming K rows with N peop ...

  6. 1109 Group Photo

    Formation is very important when taking a group photo. Given the rules of forming K rows with N peop ...

  7. 1109. Group Photo (25)

    Formation is very important when taking a group photo. Given the rules of forming K rows with N peop ...

  8. PAT 1109 Group Photo

    Formation is very important when taking a group photo. Given the rules of forming K rows with N peop ...

  9. PAT_A1109#Group Photo

    Source: PAT A1109 Group Photo (25 分) Description: Formation is very important when taking a group ph ...

  10. PAT甲级——A1109 Group Photo【25】

    Formation is very important when taking a group photo. Given the rules of forming K rows with Npeopl ...

随机推荐

  1. 爬虫管理平台-TaskPyro的任务管理

    官网:https://docs.taskpyro.cn/ 任务管理 TaskPyro提供了强大而灵活的任务管理功能,让您能够轻松创建和管理Python脚本的定时任务. 创建任务 在TaskPyro中创 ...

  2. Top 出海 AI 公司招技术!HIX.AI & Pollo.ai | 深圳

    HIX.AI & Pollo.ai 招聘高级海外 AI 产品经理 (25-45K) 岗位职责: 负责Web 端海外 AI 产品的规划与策划,负责产品需求分析及原型设计,并制定方案推动产品研发落 ...

  3. JavaScript Library – Embla Carousel

    前言 2022 年 4 月,我写了一篇 Swiper 介绍. Swiper 是当时前端最多人使用的 Slider 库,没有之一,一骑绝尘. 但是!时过境迁,这两年已经有一匹神秘的黑马悄悄杀上来了. 它 ...

  4. 康谋分享 | 汽车仿真与AI的结合应用

    在自动驾驶领域,实现高质量的虚拟传感器输出是一项关键的挑战.所有的架构和实现都会涉及来自质量.性能和功能集成等方面的需求.aiSim也不例外,因此我们会更加关注于多个因素的协调,其中,aiSim传感器 ...

  5. Laravel RCE(CVE-2021-3129)漏洞复现

    Laravel框架简介 Laravel是一套简洁.优雅的PHP Web开发框架(PHP Web Framework).它可以让你从面条一样杂乱的代码中解脱出来:它可以帮你构建一个完美的网络APP,而且 ...

  6. AI Agent核心技术揭秘:从理论到实践(中篇)

    认知是成本最低的对冲. --张三思维进化论 回顾与展望:从认知到技术的桥梁 在上一篇文章中,我们探讨了AI Agent的概念.特征和与传统AI的本质区别.我们认识到,AI Agent不仅是对话工具,更 ...

  7. Spring AOP面向切面编程 通知类型

    Spring AOP面向切面编程 通知类型 通知分为: 前置通知 执行方法之前通知 后置通知 执行方法之后通知 异常通知 相当于cache里面的内容 最终通知 相当于finally 环绕通知 前四种通 ...

  8. SpringBoot3特性——错误信息Problemdetails

    Spring Framework 6 实现了 HTTP API 规范 RFC 7807 的问题详细信息. 在本文中,我们将学习如何在 SpringBoot 3 REST API(使用 Spring F ...

  9. 【记录】OJ|区间DP|石子合并(环形)

    1. 题干 描述 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出一个算法,计算出将N堆石子 ...

  10. centos6分区要点

    安装centos6系统时,为了以后能够扩展存储,分区时要注意几点: 1.boot引导分区要选固定分区类型存储,大小是500M 2.其余分区全部做成物理卷lvm  pyshiic类型存储 3.在这个物理 ...