11.3模拟赛

news/2025/11/3 18:27:40/文章来源:https://www.cnblogs.com/needna/p/19187912

t1

cf题面

你醒了,发现全世界 OI 能力下降 \(10^6\) 倍,只有今日联考受影响。于是你打开 statement.pdf,准备闪击联考。

联考大军向你袭来,作为八校最强的 OIer,你准备在若干位置发动“闪击”。

联考大军中,每一场联考 \(i\) 都有一个编号 \(p_i\)\(p\) 是一个排列。你能在一个位置发动“闪击”,当且仅当这场联考前的联考编号全部小于这场,后的联考编号全部大于这场。形式化地,\(x\) 能发动“闪击”仅当:

\[\forall y < x, p_y < p_x \wedge \forall z > x, p_z > p_x \]

同时,为了便于攻击,你可以利用 OIer 强大的力量,进行一个操作:选择两个不同的下标 \(x, y\),交换 \(p_x, p_y\)

时间紧迫,你要快速决定且只能进行恰好一次这样的操作。你的目标是最大化可以发动“闪击”的位置。输出最大的位置数量。

对于所有测试数据,保证 \(1 \leq T \leq 5 \times 10^4\)\(2 \leq \sum n \leq 3 \times 10^5\)\(p\) 是一个排列。

题解

考虑直接计算贡献,对于每个点找出那些交换会使其产生贡献,排除本来就是好的排列之后,发现交换一定更优,接下来分类讨论。

  1. \(a_i=i\)
    • 这个时候如果左边数都小于他,那么这个数是合法的,直接计入答案,因为我们肯定不会交换这个数两侧的,因为左侧数小于右侧一定不优,直接计入答案即可。
    • 否则这个数如果左右只有一对数不合法,交换这一对即可。
  2. \(a_i>i\)
  • 考虑能不能交换 \(a_i\)\(a_{a_i}\) 来让 \(a_i\) 有贡献,充分必要条件就是有 \(a_i-1\) 个小于 \(a_i\) 的数在 \([1,a_i]\) 之间。
  1. \(a_i<i\)
    • 考虑能不能交换 \(a_i\)\(a_{a_i}\) 来让 \(a_i\) 有贡献,充分必要条件就是 \(a_i\)\([1,a_i]\) 之间最大的数字。

找到每个交换的最大值就可以了。原理是这种交换的总数是 \(O(n)\) 的。

code:

#include<bits/stdc++.h>
#define fi first
#define se second
#define int long long
#define lbt(x) (x&(-x))
#define pii pair<int,int>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
using namespace std;
const int N=5e5+10;
int n,m,k,T,a[N],p[N],mx[N],mxp[N],t[N],ans;
map<pii,int> g;
void upd(int i,int x){while(i<N){t[i]+=x;i+=lbt(i);}}
int sc(int i){int ans=0;while(i>0){ans+=t[i];i-=lbt(i);}return ans;}
signed main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);freopen("strike.in","r",stdin);freopen("strike.out","w",stdout);cin>>T;while(T--){cin>>n;g.clear();ans=0;rep(i,1,n){t[i]=0;cin>>p[i];a[p[i]]=i;mx[i]=max(mx[i-1],p[i]);}rep(i,1,n) mxp[i]=max(mxp[i-1],a[i]);rep(i,1,n){upd(p[i],1);if(p[i]==i){if(mx[i]==i) ans++;if(sc(i)==i-1) g[{a[mx[i]],mxp[i]}]++;}else if(p[i]>i){if(mx[p[i]]==p[i]) g[{i,p[i]}]++; }else if(mxp[p[i]-1]==p[i]-1) g[{p[i],i}]++;}int ma=-2;for(auto x:g) ma=max(ma,x.se);cout<<ans+ma<<'\n';}return 0;
}

t2

cf题面

你醒了,你发现你是信竞教练,准备为学生安排模拟赛。

这个赛季总共有 \(n\) 场联考,第 \(i\) 场联考的“特征”可以表示为一个整数 \(a_i\)

如果有连续两场联考满足 \(\gcd(a_i, a_{i+1}) = 1\),那么两场联考风格差别巨大,会让学生非常不满抨击教练。定义一个赛季模拟赛的“不满度”为 \(1\)\(n-1\) 中,\(\gcd(a_i, a_{i+1}) = 1\) 的下标 \(i\) 的数量。

为了避免差评,你决定对联考特征进行最多 \(k\) 次修改。每次修改可以选定一个下标 \(i\) 和任意整数 \(x\),将 \(a_i\) 改为 \(x\)

你想求出这个赛季最小的不满度。

对于所有测试数据,保证 \(T \leq 7\)\(1 \leq k \leq n \leq 10^5\)\(0 \leq a_i \leq 10^9\)

题解

贪心,肯定是把数字一个一个变成0。先把能救两个位置的拿下,然后再管1,因为每个1连续段,管到最后可以改最后一个1,一次救两个。1救完后,再管剩下的互质的。

code:

#include<bits/stdc++.h>
#define fi first
#define se second
#define ls (p<<1)
#define rs (p<<1|1)
#define pb push_back
#define mset multiset
#define int long long
#define lbt(x) (x&(-x))
#define pii pair<int,int>
#define umap unordered_map
#define m(a) memset(a,0,sizeof(a))
#define m127(a) memset(a,0x3f,sizeof(a))
#define m128(a) memset(a,-0x3f,sizeof(a))
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
using namespace std;
const int N=5e5+10;
int n,m,k,T,a[N],q,b[N];
vector<int> g;
signed main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);freopen("arrange.in","r",stdin);freopen("arrange.out","w",stdout);cin>>T;while(T--){cin>>n>>q;int sum=0,ans=0,tg=0;g.clear();rep(i,1,n) cin>>a[i];rep(i,1,n){if(a[i]!=1) tg=1;}rep(i,1,n-1){b[i]=__gcd(a[i],a[i+1]);if(b[i]==1) sum++;	}if(tg==1){rep(i,2,n-1){if(b[i-1]==1&&b[i]==1&&a[i-1]!=1&&a[i+1]!=1&&q>0){a[i]=0;q--;b[i-1]=a[i-1],b[i]=a[i+1],ans+=2;}}int l=0,r=n+1;while(a[l+1]==1) l++;l++;while(a[r-1]==1) r--;r--;rep(i,l,r){if(a[i]==1){int x=i;while(a[i+1]==1&&i<r) i++;if(i!=n&&x!=1) g.pb(i-x+1);}}sort(g.begin(),g.end());for(int v:g){if(v<=q) ans+=v+1,q-=v;else ans+=q,q=0;}cout<<max(0ll,sum-ans-q)<<'\n';}else{ans=min(q-1,n-1);cout<<sum-ans<<'\n';}}return 0;
}

t3

你醒了,你发现你成了构造 Master,秒了前两题来杀 T3。

\(T\) 次询问,每次给出正整数 \(k\),你要构造一个长度 \(\leq 60\)\(01\) 串,满足其本质不同子序列数量恰好为 \(k\)

对于所有测试数据,保证 \(1 \leq T \leq 10^5\)\(1 \leq k \leq 10^9\)

题解

然后考虑反向构造,那我枚举以 \(0\) 开头的串的个数,然后尝试顺次填数,假设我目标 \(0\) 开头串剩余 \(X\) 个,\(1\) 开头剩余 \(Y\) 个。

每次下一个位置如果填 \(0\),那我以 \(0\) 开头的串就会又产生 \(Y+1\) 个。

可以这样考虑,把前面的所有 \(0\) 选上,后面接上一个 \(1\) 开头的串,那有 \(Y\) 种,或者干脆什么都不接,那就又有 \(1\) 种,总的就是 \(Y+1\) 种,可以直接贪心地填上。

随机化 \(X,Y\) 就能过了。当然有一种有道理的做法,考虑上面的做法其实就是折损相减,所以按理来说有一些接近 \(\phi\) 作为比值的点,从这里开始枚举就好了。就是构造了一种 \(\frac{1-x}{x}=x\) 的东西让他能尽量减。

code:

#include<bits/stdc++.h>
#define int long long
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
using namespace std;
const int N=5e5+10;
int n,m,k,T,a[N];
vector<int> g[N];
int work(int x,int y){if(x==y){if(x==0) return 0;else return INT_MAX;}if(x>y) swap(x,y);int k=y/(x+1);return k+work(x,y-k*(x+1));
}
void solve(int x,int y,bool b=0){if(x==y) return;if(x>y) swap(x,y),b^=1;cout<<b;solve(x,y-(x+1),b);
}
signed main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);freopen("construct.in","r",stdin);freopen("construct.out","w",stdout);cin>>T;while(T--){cin>>n;int cnt=0;rep(i,(int)n*0.61803398874989484,n){if(work(i,n-i)<=60){solve(i,n-i);cout<<'\n';goto loop;}}loop:;}return 0;
}

t4

题面

二操作先不管,因为是独立存在的。考虑一操作,直接考虑对里边叶子的贡献,维护几个叶子 $s z $, 子树里边每个节点有几个叶子的和 $( s s z = \sum s z ) $, 自己这个节点被加了多少并维护加法 $\operatorname { t a g } $, 节点的答案。直接维护答案和节点的值,quy的时候直接把被包含的区间的答案,和没被包含但是经过的节点的贡献算上。 三和一对应的线段树大概如此:

inline void push(uint u, Z x) {tag[u] += x;val[u] += x;sum[u] += ssz[u] * x;
}
inline void down(uint u) {if (!tag[u].val) return;push(u << 1, tag[u]);push(u << 1 | 1, tag[u]);tag[u] = 0;
}
inline void modify(const uint ql, const uint qr, const uint u, const uint x) {if (dfn[u] > qr || dfn[u] + siz[u] - 1 < ql) return;if (ql <= dfn[u] && dfn[u] + siz[u] - 1 <= qr) {return push(u, x);}down(u);modify(ql, qr, u << 1, x);modify(ql, qr, u << 1 | 1, x);val[u] += (ql <= dfn[u] && dfn[u] <= qr) * x;sum[u] = val[u] * Z(maxr[0][dfn[u]] - minl[0][dfn[u]] + 1) + sum[u << 1] + sum[u << 1 | 1];
}
Z qres;
inline void query(const uint ql, const uint qr, uint u) {uint L = minl[0][dfn[u]], R = maxr[0][dfn[u]];if (L > qr || R < ql) return;if (ql <= L && R <= qr) return qres += sum[u], void();down(u);qres += Z(min(R, qr) - max(L, ql) + 1) * val[u];query(ql, qr, u << 1);query(ql, qr, u << 1 | 1);
}

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

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

相关文章

标题:低代码落地避坑指南:5 个最容易踩的雷区及解决方案

低代码平台的 “快速开发、低门槛” 特性,让很多企业满怀期待地入局,但实际落地后却发现:要么系统用不起来,要么问题频发,要么完全达不到预期效果。其实,低代码落地的失败,往往不是平台本身的问题,而是企业在实…

2025年平板清洗机标杆厂家最新推荐:恒泰清洗,超声波清洗机/清洗烘干机/全自动清洗机/周转箱清洗机/工业清洗机/树立高效洁净新标准

随着制造业对生产洁净度、自动化及环保节能要求的日益提升,工业清洗环节已从辅助工序升级为保障产品质量的核心环节。2025年,工业清洗设备市场预计将持续增长,但厂商技术积累、方案定制能力及服务响应速度的差异,使…

2025 年度盘点,最新主流 IM SDK 安全合规排名:融云打造全球化业务安全底座

2025 年度盘点,最新主流 IM SDK 安全合规排名:融云打造全球化业务安全底座在全球化业务加速推进的今天,企业和开发者选择IM SDK时面临的最大挑战已从单纯的技术性能转向安全与合规这一更加复杂的领域。 不同国家和地…

P2650 弹幕考察 题解

P2650 弹幕考察 题解P2650 弹幕考察 题解 题目链接 本人博客 前言 做法1:树状数组 做法2:二分 以上两个做法在本篇题解中均会涉及。 笔者一拿到这个题,就想到了用数据结构维护一个查询区间内原区间的个数。再一看是…

2025防火/模压/瓦楞/大跨距/热镀锌/热浸锌/不锈钢/光伏/铝合金/锌铝镁/电缆桥架推荐榜:百著金属以全场景防护领跑,四家企业凭细分优势突围

2025年,随着建筑防火标准升级与新能源基建提速,防火电缆桥架作为电缆安全防护的核心载体,市场需求持续扩容。据中国建筑金属结构协会数据,工业厂房、新能源电站、市政工程等领域需求同比增长均超 30%,“防火等级达…

视频工具FFmpeg

目录官网地址详细操作 官网地址 https://ffmpeg.org/ 详细操作 https://blog.csdn.net/Natsuago/article/details/143231558

低代码如何打破企业数字化转型的 “人才瓶颈”?

在数字化转型的赛道上,“缺技术人才” 是很多企业的共同痛点。大型企业尚且面临高级开发工程师供不应求的问题,中小微企业更是陷入 “招不到、留不住、养不起” 的困境 —— 想搭建一套贴合业务的管理系统,要么因缺…

Odoo中的消费税处理方案

首先我们来明确消费税的定义, 消费税(Excise Duty)是对特定消费品(如烟草、酒类、燃油、奢侈品)在生产或进口环节征收的间接税。 在其他国家(如美国、澳大利亚、欧盟),消费税常被称为:英文名称中文含义说明Excis…

2025河北小型新中式全屋定制,意式全屋定制,意式极简全屋定制,全屋定制厂家精选:尚品金马装饰,本土实力品牌值得关注

在全屋定制行业中,除了知名大品牌,一批规模适中的本土小型厂家凭借精准的设计、扎实的品质和贴心的服务,成为不少消费者的务实之选。以下为大家整理了河北地区几家口碑不错的小型全屋定制厂家,涵盖不同城市的特色品…

2025年常州流化床干燥机厂家盘点:聚焦中小规模企业的专业之选

在工业生产中,流化床干燥机凭借高效节能、干燥均匀的优势,成为化工、制药、食品等领域的关键设备。常州作为国内干燥设备产业的重要聚集地,涌现出众多深耕技术的中小规模厂家。以下结合设备性能、行业适配性与服务口…

Java数组——数组定义、声明、创建

Java数组——数组定义、声明、创建数组的定义 数组是相同类型数据的有序集合 数组描述的是相同类型的若干数据,按照一定先后次序排列组合而得 每一个数据称为一个数组元素,每个数组元素可以通过一个下标进行访问 数组…

2025年11月冷作模具钢,塑胶模具钢,进口模具钢,模具钢厂家推荐榜:聚焦焰特尔技术实力与品质管控!

在苏州模具钢行业中,一批规模适中的企业凭借专注的经营理念、扎实的产品品质和灵活的服务模式,成为市场上颇具性价比的选择。以下结合企业经营特色与行业口碑,优质小型模具钢厂家推荐,供相关需求方参考: 一、【推…

2025常州小型桨叶干燥机,闪蒸干燥机,流化床干燥机,喷雾干燥机厂家盘点:瑞德干燥,聚焦细分需求的务实之选

作为国内干燥设备产业的核心集聚区,常州素有 “中国干燥设备之乡” 的美誉,这里聚集了超 500 家干燥设备及配套企业,年产值规模超 100 亿元,国内市场占有率约 60%,在喷雾干燥机等细分领域形成了显著的产业优势。依…

2025年闪蒸干燥机厂家推荐:常州高性价比闪蒸干燥机企业盘点

作为国内干燥设备产业的核心集聚区,常州素有 “中国干燥设备之乡” 的美誉,这里汇聚了超 500 家干燥设备及配套企业,年产值规模超 100 亿元,国内市场占有率约 60%,在闪蒸干燥机等细分领域更是形成了成熟的产业生态…

2025年苏州竞速无人机电机,安防无人机电机,电机厂家精选榜单:睿创电子,优质企业值得关注

在苏州的电机制造领域,除了规模较大的行业龙头,一批中小型电机厂家凭借专注的技术研发、精准的市场定位和稳定的产品品质,在细分领域占据重要地位。规模适中的优质电机厂家榜单,涵盖不同应用场景与技术方向,供相关…

2025年闪蒸干燥机厂家推荐清单:聚焦细分领域的 专而精 之选

在化工、食品、医药等行业的物料干燥环节中,闪蒸干燥机凭借高效节能、适配性强的优势成为核心设备。对于寻求高性价比与精准服务的企业而言,中小规模厂家往往能以更灵活的方案满足细分需求。以下结合技术适配性、服务…

2025实用铁氟龙高温线,硅胶高温线,高压高温线,高温线厂家推荐:申远高温线,聚焦细分领域的靠谱选择

在新能源、工业制造、电子设备等领域的严苛环境中,高温线的耐温稳定性与绝缘可靠性直接关系到设备运行安全。经过对行业口碑、技术实力与场景适配性的综合梳理,专注高温线领域的厂家凭借各自优势脱颖而出,涵盖不同规…

uni-app x开发商城系统,资讯列表结构,数据渲染,news-item组件封装

一、概述 上一篇文章,已经实现了社区图片右侧数据渲染,预览图片。 接下来,实现资讯列表结构,数据渲染,news-item组件封装 效果如下:二、资讯列表结构 修改 pages/news/news.uvue文件,固定一行数据 完整代码如下…

使用office tool plus 激活office

声明:笔者安装部署的版本为LSTC2024专业增强版基本的部署方案参考知乎 若只需要重新激活office,可参考使用Office Tool Plus再次激活 Office,在博文遇到“激活失败”问题的时候,参考如下解决方案 值得注意的是,如…

#课后作业1:课件动手动脑及验证内容解答 - 20243867孙堃2405

一、AboutException.java示例运行与异常处理基础验证代码示例(模拟) public class AboutException { public static void main(String[] args) { // 演示被0除异常 int i = 1, j = 0, k; try { k = i / j; // 可能抛…