2025多校冲刺CSP模拟赛5

news/2025/10/15 21:14:19/文章来源:https://www.cnblogs.com/countryhuman/p/19144296

T1:小 Z 爱计数(count)

思路:

一道挂大分的签到题。

显然,我们要根据 \(a_i-a_{i-1}\) 值对输入数据进行排序,然后通过 \(a_i-a_{i-1}\)\(b_i-b_{i-1}\) 之间的值的比较来判断操作是否合法。这里我们根据 (题解) 是否使用 \(reset\) 键将操作划分为两种:

  1. 使用 \(reset\) 键。那么显然当 \(b_i ≤ a_i-a_{i-1}-1\) 时成立

  2. 不使用 \(reset\) 键。那么当 \(b_i-b_{i-1} ≤ a_i-a_{i-1}\) 为成立的充分条件。为什么是充分条件呢?因为我们不难发现:一个 \(+1\) 操作和一个 \(-1\) 操作合起来对值无影响。所以不等号两旁必须奇偶性相同才合法。

代码:

$code$
#include<iostream>
#include<algorithm>
#include<cmath>
#define int long long
using namespace std;
const int N=1e6+5;
int T,c,n;
struct node{int a,b;bool operator<(const node &css)const{return a<css.a;}
}e[N];
signed main(){
//	freopen("count.in","r",stdin);
//	freopen("count.out","w",stdout);ios::sync_with_stdio(false);cin>>T;while(T--){cin>>c>>n;for(int i=1;i<=n;i++){cin>>e[i].a>>e[i].b;}sort(e+1,e+1+n);bool f=0;for(int i=1;i<=n;i++){if(abs(e[i].b-e[i-1].b)<=(e[i].a-e[i-1].a)&&((abs(e[i].b-e[i-1].b)%2)==((e[i].a-e[i-1].a)%2)));else if(e[i].a-e[i-1].a-1>=abs(e[i].b));else f=1;}if(f) cout<<"No"<<'\n';else cout<<"Yes"<<'\n';}return 0;
}

T2:小 Z 爱划分(partition)

思路:

确认过眼神,是我赛时想不出的式子转化。

首先暴力 \(dp\) 肯定不难想:

\[dp_i=\sum_{j=0}^{i-1}dp_j×(a_i⊕a_j)^2 \]

这玩意一眼不是正解,但是你说这又是异或又是平方的不太好优化。那我们就先把平方去掉找找思路。

那么式子就变为了

\[dp_i=\sum_{j=0}^{i-1}dp_j×(a_i⊕a_j) \]

然后我们得想想办法把异或变个样子,那我们不妨考虑 违拆 拆位,单独考虑每个二进制位,于是就有了下式:

\[dp_i=\sum_t \sum_{j=0}^{i-1} dp_j×2^t[ ~ a_i(t)_2 ≠ a_j(t)_2 ~ ] \]

其中 \(x(k)_2\) 表示 \(x\) 在二进制下的第 \(k\) 位 ( 此为不正规设定,并无科学依据,请勿模仿 )

接下来,我们不妨令 \(sum_{x,y}\) 表示所有满足 \(a_k(x)=y\)\(dp_k\) 之和。这时我们就成功的解决了不带平方的问题。

那么接下来我们烧烤如何把平方加上。众所周知,平方的展开式为

\[(a_1+a_2+...a_n)^2=\sum_{i=1}^n\sum_{j=1}^n a_i a_j \]

那我们何不直接将这式子代入 \(dp\) 式中。这样,我们就得到了

\[dp_i=\sum_{t_1,t_2} \sum_{j=0}^{i-1} dp_j×2^{t_1+t_2}[ ~ a_i(t_1)_2 ≠ a_j(t_1)_2∧a_i(t_2)_2 ≠ a_j(t_2)_2 ~ ] \]

同理,我们设 \(sum_{x_1,x_2,y_1,y_2}\) 表示所有满足 \(a_k(x_1)=y_1∧a_k(x_2)=y_2\)

然后我们就可以以 \(O(log^2 ~ a_i)\) 的时间复杂度完成这道题啦~~

代码:

$code$
#include<iostream>
#define int long long 
using namespace std;
const int N=2e5+5,M=31,mod=1e9+7;
int T,n,ans,a[N],s[N],sum[M][M][2][2];
signed main(){
//	freopen("partition.in","r",stdin);
//	freopen("partition.out","w",stdout);ios::sync_with_stdio(false);cin>>T;while(T--){cin>>n;for(int i=1;i<=n;i++) cin>>a[i],s[i]=s[i-1]^a[i];for(int i=0;i<M;i++) for(int j=0;j<M;j++) sum[i][j][0][0]=1,sum[i][j][0][1]=sum[i][j][1][0]=sum[i][j][1][1]=0;for(int i=1;i<=n;i++){ans=0;for(int j=0;j<M;j++)for(int k=0;k<M;k++)ans=(ans+(1ll<<(j+k))%mod*sum[j][k][(((s[i]>>j)&1)^1)][(((s[i]>>k)&1)^1)]%mod)%mod;for(int j=0;j<M;j++)for(int k=0;k<M;k++)sum[j][k][((s[i]>>j)&1)][((s[i]>>k)&1)]=(sum[j][k][((s[i]>>j)&1)][((s[i]>>k)&1)]+ans)%mod;}cout<<ans<<'\n';}return 0;
}

注意: 第19行的 \(1ll\) 决定着你是 \(100 ~ pts\) 还是 \(20 ~ pts\)

T3:小 Z 爱优化(opti)

思路:

我们可以将题面转化为:

我们有 \(2n-1\) 块位置不能变的多米诺骨牌,这些多米诺骨牌的长度为 \(a_i\)\(a_i + a_{i-1}\),我们需要用这些多米诺骨牌平铺整个区间,求多米诺骨牌的长度值差最小为多少.

由于最小值和最大值都是在变化的所以我们很难进行一些操作。那我们不妨枚举最小值,然后一心一意地最小化最大值就好了。

然后我们就可以愉快地考虑 \(dp\) 了。我们设 \(dp_i\) 表示前 \(i\) 个多米诺骨牌最小化的最大值。 \(dp\) 式子也不难想

\[dp_i=min\{max\{dp_{i-1},a_i\},max\{dp_{i-2},a_i+a_{i-1}\}\} \]

但是显然,我们现在是无法 \(AC\) 的,所以我们要考虑如何优化。

我们可以仿照矩阵乘法抽象出一个以 \((min,max)\) 为运算的广义矩阵乘法:

\[\left[ \begin{matrix} dp_i\\ dp_{i-1} \\ \end{matrix} \right] = \left[ \begin{matrix} a_i & a_i + a_{i-1}\\ -∞ & ∞\\ \end{matrix} \right] \left[ \begin{matrix} dp_{i-1}\\ dp_{i-2}\\ \end{matrix} \right] \]

说个人话点的理解,就是把原来矩阵乘法中的乘法变成取 \(max\) ,把原来的加法变成取 \(min\)

正当我们由于如何计算时,线段树维护矩阵乘就闪亮登场啦~~ (其实就是线段树上的每一个节点存一个矩阵啦)

然后我们就可以以 \(O(\sum n ~ log ~ n)\) 的时间复杂度 \(AC\) 啦~~

还有另一种做法,咱就不写了,不过还是粘一下题解叭~~ 请看VCR:

image

代码:

$code$
#include<iostream>
#include<algorithm>
#define int long long
#define lid (id<<1)
#define rid (id<<1|1)
using namespace std;
const int N=2e5+5,inf=1e18;
int T,n,a[N],cnt,ans;
struct wutong{int x,y,z;bool operator<(const wutong &css)const{return z<css.z;}
}w[N<<1]; 
struct jade{int a,b,c,d;jade operator*(const jade &css)const{return {max(min(a,css.a),min(b,css.c)),max(min(a,css.b),min(b,css.d)),max(min(c,css.a),min(d,css.c)),max(min(c,css.b),min(d,css.d))};}//可以类比正常的来理解矩阵乘法 
}t[N<<2];
inline void build(int id,int l,int r){if(l==r){t[id]={-inf,inf,-inf,-inf};return ;}int mid=(l+r)>>1;build(lid,l,mid);build(rid,mid+1,r);t[id]=t[lid]*t[rid];
}
inline void update(int id,int l,int r,int x,int flag,int val){if(l==r){if(flag) t[id].c=val;else t[id].a=val;return ;}int mid=(l+r)>>1;if(x<=mid) update(lid,l,mid,x,flag,val);else update(rid,mid+1,r,x,flag,val);t[id]=t[lid]*t[rid];
}
signed main(){
//	freopen("opti.in","r",stdin);
//	freopen("opti.out","w",stdout);ios::sync_with_stdio(false);cin>>T;while(T--){cin>>n;cnt=0,ans=inf;for(int i=1;i<=n;i++) cin>>a[i],w[++cnt]={i,0,a[i]},w[++cnt]={i,1,a[i-1]+a[i]};sort(w+1,w+1+cnt);build(1,1,n);for(int i=1;i<=cnt;i++){update(1,1,n,w[i].x,w[i].y,w[i].z);ans=min(ans,w[i].z-max(t[1].a,t[1].c));}cout<<ans<<'\n';}return 0;
}

T4:小 Z 爱考试(exam)

嘿嘿,一如既往地不会啦~~

后言

像在说梦话,乱七八糟,并且莫名其妙地开始煽情而且疑似有病句。

总之,别骂太狠。【拜托🙏】

🌹鲜花🌹
就像那句歌词所言,
“我希望你被爱着,我希望你要快乐”
无论你是谁
同班同学也好,学哥学姐也好,学弟学妹也好
还是素未谋面的人也罢
即使我们之间可能并未有过深的交情
但我还是想给予你最真挚地祝愿
或许我们之间有过一些小矛盾,也可能你有过某些时刻单方面的看我不爽
这些都没有关系
它们只能证明我们或许在某些事情上的观念,喜好和处理方式不同
但这并不意味着我或你不值得人间美好
如今山河无恙、万家灯火
同为华夏儿女
我希望你健康快乐,积极乐观、永远对未来、生活和自己充满希望
就像鲁迅说的那样
“愿中国青年都能摆脱冷气,只是向上走”

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

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

相关文章

应用安全 --- 安卓神器 之 入口加密

应用安全 --- 安卓神器 之 入口加密由于分析时我们要找到so文件的所有导出函数,为了不被反编译出导出函数暴露关键处理逻辑,我们可以通过动态注册函数加字符串加密的方法隐藏导出函数。 解决方法: 解密字符串后找到…

读书报告和代码

《神经网络与深度学习:从理论到CIFAR-10实战》读书报告 一、引言 在人工智能蓬勃发展的当下,神经网络作为机器学习领域的核心技术,已在计算机视觉、自然语言处理等诸多领域展现出强大的能力。本次读书报告将围绕神经…

P66实训2

运行代码 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader from torchvision.datasets import CIFAR10 from torchvision.transforms import ToTensor, Nor…

《程序员的修炼之道:从小工到专家》阅读笔记

《程序员的修炼之道:从小工到专家》并非单纯的技术手册,而是程序员职业成长的指南。它跳出具体编码技巧,聚焦从 “小工” 到 “专家” 的核心素养修炼。 书中提出的 “DRY 原则”“正交性” 等理念,直指开发中的常…

关于Pytorch深度学习神经网络的读书报告

在深度学习领域,卷积神经网络(CNN)凭借其在图像识别、计算机视觉等任务中的卓越表现,成为新手入门深度学习时绕不开的重要知识点。而 PyTorch 作为一款简洁灵活的深度学习框架,为理解和实现 CNN 提供了极大的便利…

牛客刷题-Day13

优先队列、并查集 https://ac.nowcoder.com/acm/contest/22904?from=acdiscuss牛客刷题-Day13 今日刷题:\(1001-1005\) 1002 Running Median 题目描述 For this problem, you will write a program that reads in a …

蛋白表达标签:提升重组蛋白研究与生产的关键工具

蛋白表达标签:提升重组蛋白研究与生产的关键工具 在重组蛋白的生产与应用中,蛋白表达标签已成为不可或缺的工具。它们通过融合到目标蛋白的N端或C端,简化了蛋白的纯化、检测与稳定性管理。对于科研与工业用户而言,…

const int *p和int *const p快速区分

const int *p:其地址可变,内容不可变。个人记法为去掉int为const *p,const修饰*p,而*p又指其内容,所以内容不可变。 int * const p:其内容可变,地址不可变。个人记法为去掉int为*const p,const修饰p,p不可变则…

二分图、拓扑与欧拉

1、二分图匹配问题(判断是否二分图可以使用并查集) `// 邻接表存储图 int n1, n2, m; int h[500], e[100010],ne[100010], idx = 0; //st 标记是否递归找过, match[x]:和 x 编号的男生的编号 int st[510], match[5…

pytorch作业

import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pyplot as plt =====================…

pytorch实验题作业

import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader from torchvision import datasets, transforms import matplotlib.pyplot as plt 数据预处理:标准化+数…

每日笔记

忘了写了,但是没有关系,今天加油,今天学习了还健身了

Zhengrui #3346. DINO

被我暴力干过去了qwq。 你考虑一个事情,打开大样例,点击 .out 文件,发现几乎全是 \(0\),你想一想为什么,本质上是你的 \(mex\) 每增加 \(1\),你的点的数量就会至少翻一倍,也就是说,答案最多是 \(O(\log n)\) 级…

Pytorch深度学习训练

import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader from torchvision import datasets, transforms import matplotlib.pyplot as plt 数据预处理:标准化+数…

P11894 「LAOI-9」Update

题意十分甚至有九分的简单,但是这个东西似乎是不好做的,我想不出来任何已知的 log 数据结构维护它。 突然发现这个东西增长是缓慢的,我于是乎写了个程序验证,最后发现答案最多是 1e6 左右的一个数。 果然有的时候观…

win10软实时设置 - 教程

win10软实时设置 - 教程2025-10-15 20:47 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; fon…

实用指南:Hunyuan3D-Omni:可控3D资产生成的统一框架

实用指南:Hunyuan3D-Omni:可控3D资产生成的统一框架pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&qu…

ZR 2025 NOIP 二十连测 Day 3

40 + 100 + 30 + 20 = 190, Rank 61/130.打满了。25noip二十连测day3 链接:link 题解:题目内 时间:4.5h (2025.10.15 13:40~18:10) 题目数:4 难度:A B C D\(\color{#FFC116} 黄\)*1500估分:40 + 100 + 15 + [5,?…

实用指南:2025年9月个人工作生活总结

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

P14223 [ICPC 2024 Kunming I] 乐观向上

题目传送门 欢迎光顾我的博客 我们考虑如何从左往右的进行填数操作。当我们填到位置 \(i\) 时, \(p_{i}\) 这个数能被填进去需要满足的条件就是 \(p_{0} \oplus p_{1} \oplus \cdots \oplus p_{i-1} \neq p_{i}\) 。 …