拾壹月Ⅲ

news/2025/11/3 22:02:07/文章来源:https://www.cnblogs.com/lc1230/p/19188418

摆了一天,非常困,啥也没写,大部分不是口胡就是看题解。
打球

MX noip Round1

T1

很快就会了,没修改的时候最优的肯定是最大值加上最小的,直接排序求最大最小值即可。
而对于修改 \(a_x=v\) ,不妨设修改是变小的:
就二分出 \(v\) 的位置 \(pos\) ,对于 \([1,pos),(x,n]\) 没改变,而对于 \([pos,x]\) 就 预处理一个错位的 \(st\) 表和原来两边的答案取最值。
变大是一样的总共维护 \(4\) 个就好,不想写了。

T2

发现对于答案有贡献的就是数组里的 \(1和2\) ,因为 \(k\) 是可以随便选的。
正难则反,考虑什么样的区间是不合法的 (\(f=0\)
1、没有 \(1\) 的区间,所以对于一个极大的这个区间长度为 \(len\) ,贡献是 \(\frac{n*(n-1)}{2}\)
2、两端是 \(1\) 中间没有 \(2\) 的区间
所以用两个 \(set\) 分别维护 \(1,2\) 的位置集合,二分各种加减贡献。
具体来说对于将 \(a_x=v\)
1、\(a_x=1\)
二分出前一个和后一个 \(1\) 的位置 \(l,r\),考虑减去 \([l,x],[x,r]\) 的,加上 \([l,r]\)
再判断 \([l,x],[x,r]\)\(2\) 的个数,从而判断 \([l,r]\) 是否符合条件二,可以再二分也可以用一个树状数组维护
2、\(a_x=2\)
\(x\) 两端最近的 \(1\) 看看是不是删完之后就没有 \(2\) 了。
\(v=1/2\) 的都是类似的,也没写代码,真的很摆......

与 csp 相关

arc207a

似乎与 \(T4\) 相关?
学会了一类 \(trick\)
对于复杂的题意,尤其是 \(dp\) ,考虑形式化题意变成一个柿子
而这题就是对于 \(a\) 的一个排列 \(b\) ,要求:
\(\sum max(b_i-(i-1),0) \le X\)

第一个 trick

发现 \(max(b_i-(i-1),0)+min(b_i,i-1)=b_i\) ,我也不知道怎么发现的,反正观察题解就发现了。
所以设 \(Y=\sum a_i - X\) 则要求 \(min(b_i,i-1) \ge Y\)

第二个 trick

统计这类排列的数量,利用二分图匹配。
因为首先大脑就会想到大的 \(b_i\) 和 大的 \(i-1\) 显然更好,所以考虑把 \(b\) 作为左部点,\(i-1\) 作为右部点,边权就是点权 \(min\) ,考虑从大到小排序之后顺序考虑每一个点。
对于每个点,要么与之前没被匹配的点匹配要么先不管等着后面来匹配,也许叫做贡献延后计算。

dp

所以设 \(f_{i,j,k,s}\) 表示考虑前 \(i\) 个点,有 \(j,k\) 个左右部点没匹配,权值和为 \(s\)
注意为什么现在可以在状态里写边权和 ,因为 \(\sum min(b_i,i-1) \le \frac{n*(n-1)}{2}\) ,所以 \(s\)\(n^2\) 的。
那么分类这个点是左还是右,匹不匹配即可,现在是 \(O(n^5)\)
那么发现对于前 \(i\) 个点左右部点的数量固定,那么枚举了 \(j\) ,实际上 \(k\) 是固定的,就消去这一维,\(O(n^4)\)

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=202,mod=998244353;
int n,S,x,a[N],f[N][N][5050];
struct ed{int v,id;
}p[N];
bool cmp(ed x,ed y){return x.v>y.v;
}
int sum[N][2];
void add(int &x,int y){x+=y;if(x>mod)x-=mod;
}
signed main(){cin>>n>>x;for(int i=1;i<=n;i++){cin>>a[i];S+=a[i];p[i]={a[i],0},p[i+n]={i-1,1};}x=S-x;if(x<0){int ans=1;for(int i=1;i<=n;i++){ans=ans*i%mod;}cout<<ans;return 0;}if(x>(n-1)*n/2){cout<<0;return 0;}sort(p+1,p+2*n+1,cmp);for(int i=1;i<=2*n;i++){sum[i][0]=sum[i-1][0]+(!p[i].id);sum[i][1]=sum[i-1][1]+p[i].id;}f[0][0][0]=1;for(int i=1;i<=2*n;i++){int v=p[i].v;for(int j=0;j<=sum[i][0];j++){int k=sum[i][1]-sum[i][0]+j;if(k<0||k>sum[i][1])continue;for(int su=0;su<=n*(n-1)/2;su++){if(p[i].id){if(su>=v)add(f[i][j][su],(j+1)*f[i-1][j+1][su-v]%mod);if(k) add(f[i][j][su],f[i-1][j][su]);}else{if(su>=v)add(f[i][j][su],(k+1)*f[i-1][j][su-v]%mod);if(j)add(f[i][j][su],f[i-1][j-1][su]);}}}}int ans=0;for(int su=x;su<=n*(n-1)/2;su++) add(ans,f[n*2][0][su]);cout<<ans;return 0;
}

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

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

相关文章

20251103周一日记

20251103周一日记这周任务好多啊:哥哥结婚 两个课汇报 高数课答疑 实验助教 科研的 今日: 1.早上一觉醒来胸口疼,好像是压到了。洗个澡吃完饭回学校。 2.下午回实验室网很卡,把上周张老师发的毕设文章读完了。开始…

Window 安装多个 MySQL 实例 - Higurashi

当前已经安装了 MySQ(8.3.0),因为有时会需要用到多套系统数据(比如测试生产各一套数据),为了避免数据库名称冲突,希望安装多个 MySQL 实例。停止现有 MySQL 复制D:\soft\mysql-8.3.0-winx64\my.ini到D:\soft\my…

普赛斯

普赛斯关于我们-武汉普赛斯电子|全球光电芯片测试方案领跑者

claude code+openspec开发java代码基本流程

0️⃣ 准备:一次装好,终身可用 # 1. 装 Node ≥20 node -v # 出现 v22+ 就行# 2. 装 OpenSpec(规范驱动) npm i -g @fission-ai/openspec@latest# 3. 装 Claude Code(AI 编码) npm i -g cl…

【C】结构体赋值

结构体赋值 例如: #include <stdio.h> #include <string.h>struct Inner {int x;char name[20]; };struct Outer {int id;struct Inner inner; }; 初始化赋值(定义时): struct Outer o1 = {.id = 1,.i…

Office 2024 专业增强版下载安装教程:安装/下载/激活/全流程教程

大家好!最近总有朋友问 “Office 2024 专业增强版怎么装”“在哪能下安全的 Office 2024 安装包”,今天特意整理这份超详细的 Office 2024 专业增强版下载安装教程,从电脑能不能装的配置要求,到安全下载 Office 20…

Office 2024 专业增强版下载安装教程:安装/下载/激活/全流程教程

大家好!最近总有朋友问 “Office 2024 专业增强版怎么装”“在哪能下安全的 Office 2024 安装包”,今天特意整理这份超详细的 Office 2024 专业增强版下载安装教程,从电脑能不能装的配置要求,到安全下载 Office 20…

模拟赛 29

T1模拟即可,请输入文本。点击查看代码 #include<bits/stdc++.h> #define MAXN 10005 #define int long long using namespace std; const int inf=1e18; string tmp,ans[20]; int T,n,cnt,pos; char c[1005]; s…

11.3阅读笔记

​​1. 变化是必然的:拥抱“柔性”设计​​ “柔性设计”不是指设计能预测所有变化,而是指当变化来临时,​​修改所造成的连锁反应被降到最低​​。这直接回到了我们10月份讨论的​​正交性​​和​​DRY原则​​。…

fhq treap笔记

fhq(范浩强) treap 基本的操作就是split以及merge 需要pushup来维护siz属性的正确性 split分为按val以及按rank 用kth来得到第k个数的值 反过来,如果是一个排列的话,可以用维护出来的每个节点的fa以及pos来得到排名…

K8S最全详解 - 智慧园区

K8S K8S,全程是“Kubernetes”,是一个开源的容器编排平台,用于自动化应用的 部署、扩展和管理。 K8S,最早由 Google 开发,后捐赠给 CNCF,如今已经成为 云原生领域的事实标准。 K8S 解决了在生产环境中管理大量容…

11/3

今天下午Java考试,惊险度过

ICPC2025 武汉站 游记

rk11-北京大学-请输入文本 Pre 贵校的竞争还是太激烈了,在前两次选拔赛打炸的情况下最后一场极限翻盘,苟到了一个 ICPC 区域赛名额。 参加的网络赛 2 因为某个队友睡过头了所以只有两个人,打的也一坨,喜提 #161。 …

25.11.03

AGC003E 哎我好菜怎么这个题卡半天。 首先想到可以把 \(a_i\) 单调栈干掉,然后倒着扫求出前面要重复多少次。 但是会剩下一段,需要单独做。 先不要想太复杂,考虑如何暴力,因为额外部分只关心长度和次数,因此设计一…

win10安装neo4j-community-3.5.7-windows

win10安装neo4j-community-3.5.7-windows 1、下载neo4j-community-3.5.7-windows下载地址:https://we-yun.com/doc/neo4j/选择对应版本的文件,下载, 2、配置环境变量NEO4J_HOME D:\neo4j-community-3.5.7 Path:%NE…

工作感受月记(202511月)

2025年11月03号 月初工作第一天,也是第一周,遇事较多,全是请假半天做。 周一见同学,请假一下午,周二去上海,欢送老板会。周三回成都,约见唐老师。周六需考试,软件设计师。 今日工作事项: 1/ 与yuki进行app se…

基于Blocking queue的生产消费模型

file: BlockQueue.hpp: #pragma once #include<pthread.h> #include<cassert> #include<queue> const int maxsize=5; template<class T> class BlockQueue{ public:BlockQueue(){int n;n=pth…

React中useContext的基本使用和原理解析

React 中 useContext 的使用方法 在 React 中,useContext 是一个内置的 Hook,用于在函数组件中轻松访问 Context(全局公共状态),避免了手动逐层传递 props 的复杂性。它依赖于 Context API,通过 Provider 提供数…

JDK的安装过程

第一步:右击“此电脑”,在显示的菜单中单击“属性”,在“系统信息”中点击“高级系统设置” 第二步:在弹出的“系统属性”对话框中,选择“高级”选项卡中的“环境变量” 第三步:在弹出的对话框中,单击“系统变量…

阅读笔记0

第3章:基本工具 强调善用工具能大幅提升效率,工具是程序员的“第二双手”。文本编辑器:不止是打字,要熟练使用快捷键、自定义配置,甚至通过插件扩展功能(如代码补全、语法检查)。 ​ 版本控制:用Git等工具管理…