9.17 CSP-S模拟23/多校A层冲刺NOIP2024模拟赛19 改题记录

news/2025/9/17 18:17:01/文章来源:https://www.cnblogs.com/OrangeLand/p/19097257

HZOJ

写在前面

连着三天吃三坨。本来想着今天大凶忌参加模拟赛然后没模拟赛挺好的,然后7:57临时通知加场,难道这就是大凶?好吧打就打吧,没想到真差点爆零。粗看没一道题可做怀疑自己的水平了然后赛后猛然醒悟是自己蠢如猪。其实这篇前面应该还有两篇,但是奈何这套改得比较快就先写这套的吧。明天就可以润出学校回家了芜湖~~~~~~~~~~

《Never Ending Story》 손 닿을 수 없는 저기 어딘가 手触不到的某处

오늘도 난 숨 쉬고 있지만
虽然我今天也依然呼吸着

너와 머물던 작은 의자 위에
在与你共同停留过的小小椅子上

같은 모습의 바람이 지나네
熟悉的风又一次吹过

너는 떠나며 마치 날 떠나가 듯이
你离去时仿佛连我也要一同抛弃

멀리 손을 흔들며
远远地挥手道别

언젠가 추억에 남겨져 갈 거라고
说这回忆终有一天也会随风逝去

그리워 하면 언젠가 만나게 되는
如果思念的话迟早会见面

어느 영화와 같은 일들이 이뤄져가기를
愿像某部电影一般的情节终有一天成真

힘겨워한 날에 너를 지킬 수 없었던
艰难的日子里我未能守护你

아름다운 시절 속에 머문 그대이기에
因为你曾在我最美的时光里停留

T1 选彩笔(rgb)

RT。因为我是彩笔所以我被筛选出来了。题意大概是给定\(n\) 个元素每个元素有3个关键字,求选取\(k\) 个元素使这\(k\) 个元素三个关键字的极差的最大值最小。

初看是道dp,但是选与不选有后效性,而且只能想出来\(O(n^2)\) 的假式子。然后开始乱猜结论,猜了个选取的\(k\) 个元素对于某一个关键字排序后一定在一个连续段上。然后搓了棵权值线段树然后过了两个小样例,大的过不了,结论显然假了。然后观察到子任务只与关键字的值域\(V\) 有关,猜测是\(O(nV)\)\(O(kV)\) 的dp,显然没想出来怎么写。然后就跳了,此时已过去1.5-2小时。

转机在写完所有题后剩下的最后5分钟。本来想抱怨不给部分分的结果突然意识到\(O(V^3)\) 可过,空间也开得下,甚至还能再加个二分。所以立马开始抢时间。事实证明没抢过。然后赛后发现那就是正解思路。无如语。

思路就是将每个元素按3个关键字的大小放在空间直角坐标系里,然后可以二分每一维的最大距离,枚举每一维的起点,计算该空间范围内点是否超过了\(k\),复杂度\(O(nV^3logV)\)。显然可以前缀和优化。对于值域内每个位置求一个三维前缀和即可。

代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int n,kk;
int a[258][258][258],mxr,mxg,mxb;
int main(){freopen("rgb.in","r",stdin);freopen("rgb.out","w",stdout);ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>n>>kk;for(int i=1,r,g,b;i<=n;i++) cin>>r>>g>>b,++r,++g,++b,a[r][g][b]++,mxr=max(mxr,r),mxg=max(mxg,g),mxb=max(mxb,b);int l=0,r=max({mxr,mxg,mxb}),rr=r,mid;for(int i=1;i<=r;i++)for(int j=1;j<=r;j++)for(int k=1;k<=r;k++) a[i][j][k]+=a[i-1][j][k]+a[i][j-1][k]+a[i][j][k-1]-a[i-1][j-1][k]-a[i][j-1][k-1]-a[i-1][j][k-1]+a[i-1][j-1][k-1];//,cout<<a[i][j][k]<<'\n';while(l<=r){mid=(l+r)>>1;bool flg=0;for(int i=mid;i<=rr;i++)for(int j=mid;j<=rr;j++)for(int k=mid;k<=rr;k++)if(a[i][j][k]-a[i-mid][j][k]-a[i][j-mid][k]-a[i][j][k-mid]+a[i-mid][j-mid][k]+a[i][j-mid][k-mid]+a[i-mid][j][k-mid]-a[i-mid][j-mid][k-mid]>=kk){flg=1;break;}if(flg) r=mid-1;else l=mid+1;}cout<<l-1;return 0;
}

T2 兵蚁排序(sort)

看到是道构造题还要进行一些莫名其妙的操作就觉得不可做跳了。最后写完能写的部分说打点部分分然后突然发现那个范围是个人都能做然后就开始狂写狂调。期间还由于没意识到空间开小了以为闹鬼了狂惊不止。好在最后是调出来了。

题意就是给定一个初始序列和一个目标序列,每次操作能选择一个区间进行从小到大排序,求问能否通过\(n^2\) 以内次操作将初始序列变为目标序列,如果可以,求问可能的最小操作次数和具体操作。

笑如死本来说打打暴力看到\(n^2\) 猛然醒悟这不就可以模拟冒泡排序吗。然后写完就可以A了。然后记得存步骤的时候要开\(n^2\) 的空间,不然就会莫名其妙地挂掉。

代码没啥难度就不放了。

T3 人口局 DBA(dba)

一眼数位dp。题意是类似于填数游戏,给一个长为\(l\) 的序列,求问长度是\(l\) 的,上界是\(m\) 的,各位数之和是\(sum_l\) 的,且\(m\) 进制下大小小于\(l\) 的序列(可存在前导零)个数。

手搓了个记忆化搜索然后怕超数据范围开了unordered_map(实际拖累了效率)。反正只有15分。赛后加了点剪枝喜提56pts。

记忆化搜索
#include<bits/stdc++.h>
using namespace std;
const int maxn=2010,mod=1e9+7;
typedef long long ll;
int m,l,sum;
int a[maxn];
int dp[maxn][2][maxn*8];
#define min(a,b) (a<b?a:b)
inline int dfs(int lv,bool up,int res){if(res==0||(!up&&res==(l-lv)*(m-1))) return 1;if(res>(l-lv)*(m-1)) return 0;if(dp[lv][up][res]) return dp[lv][up][res];if(lv==l) return (res==0);int ans=0;if(up) ans=(ans+dfs(lv+1,up,res-a[lv+1]))%mod;for(register int i=min((!up?m:a[lv+1]),res+1)-1;i>=0;i--) ans=(ans+dfs(lv+1,0,res-i))%mod;return dp[lv][up][res]=ans;
}
int main(){freopen("dba.in","r",stdin);freopen("dba.out","w",stdout);ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>m>>l;for(int i=1;i<=l;i++) cin>>a[i],sum+=a[i];cout<<((dfs(0,1,sum)-1)%mod+mod)%mod;return 0;
}

然后是正解。正解是出人意料而又极为恶心的 容 斥

由于所有序列只分两种情况:受上界限制和不受上界限制。所以我们可以分别讨论。设 \(H(i,j)\) 代表前\(i\) 个位置总和为\(j\) 的方案数。先不考虑\(l\) 的上界限制。但是我们有\(m\) 的限制,所以我们令\(F(x)\) 为恰好有\(x\) 个位置不满足\(<m\) 的方案数,\(G(x)\) 为至少有\(x\) 个位置不满足\(<m\) 的方案数。然后就是一点也记不住的二项式反演的式子:

\[G(x)=\sum_{i=x}^l\binom{i}{x}F(i) \]

\[F(x)=\sum_{i=x}^l(-1)^{i-x}\binom{i}{x}G(i) \]

考虑求解\(G(x)\)。考虑使用插板法。先选出\(x\)个位置等于\(m\),剩下的值再分配给各个位置就满足了“至少”。所以式子就为:

\[G(x)=\binom{l}{x}\binom{s-xm+l-1}{l-1} \]

反演得:

\[F(x)=\sum_{i=x}^l(-1)^{i-x}\binom{i}{x}\binom{l}{x}\binom{s-xm+l-1}{l-1} \]

所以\(H(l,sum)\) 即为 \(F(0)\)

\[H(l,sum)=F(0)=\sum_{i=0}^l(-1)^{i-x}\binom{i}{0}\binom{l}{i}\binom{s-xm+l-1}{l-1} \]

类别数位dp考虑上界。考虑前面有\(x\) 个位置到达了上界且前缀和\(s\),则后面就不用考虑到达上界了所以方案数为\(H(l-x,sum-s)\)。经过一系列化简和优化(一笔带过是因为我看不懂)就为:

\[ans_k=\sum_{j=0}^{l-1}(-1)^j\binom{l-1}{j}(\binom{sum-jm+l-1}{l-1}-\binom{s-a_k-jm+l-1}{l-1}) \]

\[ans=\sum ans_k \]

代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=2010,mod=1e9+7;
typedef long long ll;
int m,l,sum;
int a[maxn],ny[maxn*maxn],jc[maxn*maxn];
inline int qpow(int x,int y){int res=1;while(y){if(y&1) res=1ll*res*x%mod;x=1ll*x*x%mod;y>>=1;}return res;
}
inline int C(int x,int y){if(x<y) return 0;return 1ll*jc[x]*ny[y]%mod*ny[x-y]%mod;
}
int main(){freopen("dba.in","r",stdin);freopen("dba.out","w",stdout);ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>m>>l;jc[0]=ny[0]=1;for(int i=1;i<=m*l;i++) jc[i]=1ll*jc[i-1]*i%mod,ny[i]=qpow(jc[i],mod-2);for(int i=l;i>=1;i--) cin>>a[i],sum+=a[i];int ans=0;for(int i=l;i>=1;i--){int res=0;for(int j=0;j<i;j++){int opt=(j&1)?-1:1;int k=(1ll*C(i-1,j)*((C(sum-1ll*m*j+i-1,i-1)-C(1ll*sum-a[i]-m*j+i-1,i-1))%mod)%mod+mod)%mod;res=(res+1ll*opt*k)%mod;}ans=(ans+res)%mod;sum-=a[i];}cout<<(ans%mod+mod)%mod;return 0;
}

T4 银行的源起(banking)

题意是一棵树每个点有个点权,每条边有个边权,求问在树上选取两个点,使所有点的点权乘以距离其最近的选取点的和最小,求问这个最小值是多少。

不是很想改正解所有写写部分分写法吧。

第一档 枚举选择的两个点,复杂度\(O(n^3)\)

第二档 一个点只会去两点中的一个,所以必定会有一条边不会被任何点经过。枚举这条边将整棵数分为两部分,两部分分别计算其最小值相加即可,复杂度\(O(n^2)\)

后面不想写了、、、

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

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

相关文章

Java基本语法

Java基本语法Day04 今天内容大部分在复习运算符的内容和分支语句练习题 复习运算符: 运算符:+ - + - * / % (前)++ (后)++ (前)-- (后)-- + 算术运算符: 【特别说明的】 1.//(前)++ :先自增1,后运算 //(后)++ :先运算,后自增1 2.//(前)-- :先自减1,后运算 //(后)-- :先运算,…

在AI技术快速实现创想的时代,挖掘前端学习新需求成为关键——某知名编程教育平台需求洞察

本文分析了一个包含50个前端项目的编程学习资源,涵盖交互设计、动画效果和实用工具等多种类型,通过用户反馈发现了界面优化、功能扩展和教学改进等方面的潜在需求。a.内容描述 该项目是一个包含50个独立前端项目的编程学习资源,核心功能定位在于通过实际项目练习帮助开发者掌…

IvorySQL 与 deepin 完成兼容性认证,共创开源生态新篇章

近日,IvorySQL 与 deepin 操作系统成功完成了兼容性适配认证。这一里程碑式的成就标志着 IvorySQL 在国产操作系统生态中的进一步深化,为用户提供更稳定、高效的数据库解决方案。deepin 简介 深度操作系统 deepin 是一款以“简洁、美观、易用”著称的国产 Linux 发行版,拥有…

在 Nginx 上搭建静态站点

1、新建站点的配置文件 vi /etc/nginx/conf.d/www.xxx.com.conf2、写入如下内容: server {listen 80;#listen [::]:80;server_name www.xxx.com; # 这里可以写你的域名,或者 _ 表示匹配所有 root /var/www/www.xxx.com; # 你的静态文件目录 index index.html index.htm;locat…

kylin SP3安装mysql 8.4.5

环境:OS:kylin SP3mysql:8.4.5 glibc2.17,建议安装glibc.2.28版本 查看系统glibc版本[root@localhost ~]# ldd --versionldd (GNU libc) 2.28Copyright (C) 2018 自由软件基金会。这是一个自由软件;请见源代码的授权条款。本软件不含任何没有担保;甚至不保证适销性或者适合某…

Unity中是否可以禁用GC

1)Unity中可以禁用GC吗2)项目是URP管线,渲染模块CPU耗时高,经排查主要是Batches数过高,应怎样进一步排查和优化渲染批次这是第445篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。 UWA社区主页:co…

经典SQL语句大全

经典SQL语句大全一、基础1、说明:创建数据库CREATE DATABASE database-name2、说明:删除数据库drop database dbname3、说明:备份sql server--- 创建 备份数据的 deviceUSE masterEXEC sp_addumpdevice disk, testBack, c:\mssql7backup\MyNwind_1.dat--- 开始 备份BACKUP D…

Rhinoceros 8.23.25251.13001 犀牛3D建模

描述 Rhinoceros 是由美国Robert McNeel公司最新出品的专业强大的3D建模软件。软件以集百家之长为一体的发展教育理念,拥有NURBS的优秀传统建模教学方法,也有一个网格进行建模插件T-Spline,使建模方式方法有了更多的挑选,然后能创建出更传神、生动的造型。能输入和输出几十…

《深入理解计算机系统》计算机系统漫游(一) - Invinc

本文记录《深入理解计算机系统》中第1章 计算机系统漫游 的一些知识点。本文记录《深入理解计算机系统》中第1章 计算机系统漫游 的一些知识点。第1章 计算机系统漫游 信息就是位+上下文 系统中所有的信息——包括磁盘文件、内存中的程序、内存中存放的用户数据以及网络上传送的…

从几何分离到语义理解:深度解析3D点云分割与语义分割的本质区别

在三维计算机视觉领域,3D点云作为真实世界场景的核心数据载体,其处理技术直接决定了机器感知环境的精度与效率。 其中,3D点云分割与语义分割是两类关键技术,尽管二者同属点云处理范畴,但在目标定位、信息输出与应用价值上存在本质差异。 前者专注于“几何层面的分离”,通…

欧拉筛(线性筛)算法分析

前言对于寻找素数,第一时间想到的便是二重循环暴力查找,其复杂度O(n^2),通过循环中只判断到根号n可以优化一些,不过复杂度也达不到预期。在数论的学习中,我学到了埃氏筛法,O(nloglogn)的算法,而在一些数据范围达到1e7这样的题目中,也很难让人满意,于是我便学习了欧拉筛…

2021年安徽省大数据与人工智能应用竞赛 大数据(网络赛)-高职组赛题

本套数据数据: 通过网盘分享的文件: 链接: https://pan.baidu.com/s/1ZQXoWQhCOAiGVcFOZozV1g?pwd=json 提取码: json 第二部分:大数据程序编写部分(30分) 任务一、数据抽取转化部分(5分) 1、使用sqoop将MySQL的sakila数据库中的city表中city列以C开头的数据导入到hdfs…

一些写了和没写的数学!

P8114 [Cnoi2021] 六边形战士 传送 非常好玩的题! 首先你大概率看过一些“无字证明”,其中很经典的是这个: 证明:用若干个边长为 \(1\),顶角为 \(60\) 度的菱形拼成一个边长为 \(n\) 的正六边形,三个方向的菱形个数一定相等。这是一个经典的无字证明,虽然前置的说明要费…

【光照】[自发光Emission]以UnityURP为例

【从UnityURP开始探索游戏渲染】专栏-直达自发光的基本原理 $Cemissive=Memissive$ 自发光是物体表面主动发射光线的现象,在光照模型中通常作为独立于外部光源的附加项。其核心特点是不受其他光照影响,但可以影响周围环境。 实现流程‌定义发射颜色和强度‌:确定基础发光颜色…

mybatis-plus初体验,解决报错Invalid value type for attribute factoryBeanObjectType: java.lang.String

解决报错Invalid value type for attribute factoryBeanObjectType: java.lang.String 推荐这位大佬的博客: https://www.cnblogs.com/muphy/p/18653627 项目结构MyBatis-Plus配置类MyBatisPlusConfig package com.example.config;import com.baomidou.mybatisplus.annotation…

Alexandresku设计的loki小对象内存分配器

Loki是由 Alexandresku 编写的一个与《Modern C++ Design》(C++设计新思维)一书配套发行的C++代码库。其中有两个文件 SmallObj.h 、SmallObj.cpp 进行内存管理,可以单独进行使用 三个class,第一层是chunk,第二层是vector<chunk> FixedAllocator,第三层是vector&l…

C++ 内存管理

C++ 内存管理是程序设计的核心环节,直接影响程序的性能、稳定性和安全性。C++ 不像 Java、Python 等语言有自动垃圾回收机制,而是需要开发者手动管理动态内存(或通过智能指针等机制自动管理)。 1、C++ 内存分区内存区域 存储内容 生命周期 管理方式栈 (Stack) 函数参数、局…

浅谈制氢电源及英飞凌解决方案

大家对氢元素肯定都不陌生,认识它基本都是从背元素周期表开始的。近年来我们身边多了很多氢的身影,从北京冬奥会的氢燃料电池大巴,再到广州南沙小虎岛电氢智慧能源站,氢也越来越被大家熟知。工业上,氢的使用可是一点都不少,自 1975 年以来,需求量增长了三倍,而且还在继…

微算法科技(NASDAQ:MLGO)研究分布式量子计算,释放量子计算潜能

在信息时代,数据量呈指数级增长,经典计算机面临算力瓶颈。量子计算以其超强的并行处理能力,被视为下一世代计算范式的颠覆者。然而,单个量子处理器的脆弱性和制造难度限制了其广泛应用。微算法科技(NASDAQ:MLGO)研发团队研究通过分布式量子计算模型,将多个量子计算节点连…

AI 重塑招聘三角:Moka 招聘智能体如何实现 HR、候选人与企业的三方共赢

AI 重塑招聘三角:Moka 招聘智能体如何实现 HR、候选人与企业的三方共赢在人才竞争进入白热化的今天,招聘早已不是 HR 单方面的 “筛选任务”,而是涉及 HR 效率、候选人体验、企业战略人才储备的三角关系。传统招聘模式下,这三角常常陷入 “HR 疲于奔命却难出成果、候选人等…