CF1041

news/2024/11/18 11:33:24/文章来源:https://www.cnblogs.com/Myyy-L/p/18552206

A.Heist

CF原题链接

题目大意:

给出一个长度为\(n\)的序列\(a\),已知序列\(a\)是由一个首项为\(x\)、常数为\(1\)的等差数列删除若干个数得来,求删数的最少个数。

解题思路:

直接做做完了啊,为什么这题不是红题 既然要让删的数最少,那就要让原序列长度尽量小。我们钦定首项\(x\)\(min_{a}\),末项为\(max_{a}\),然后给原序列升序排序,\(\Sigma^{n}_{i=2}(a_{i}-a_{i-1}-1)\)就是答案。

没啥用的代码
#incIude <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1010;
int n,a[N];
int ans;signed main()
{scanf("%lld",&n);for (int i=1;i<=n;i++) scanf("%lld",&a[i]);sort(a+1,a+1+n);for (int i=2;i<=n;i++) ans+=a[i]-a[i-1]-1;printf("%lld",ans);return 0;
}

B.Buying a TV Set

CF原题链接

题目大意:

给出4个数\(a,b,c,d\),求满足\(\frac{x}{y}=\frac{c}{d},x\leqslant a,y\leqslant b\)\((x,y)\)数量。

解题思路:

直接做做完了啊,为什么这题不是红题 容易想到,有一种东西叫做约分。那么我们钦定\(\frac{c}{d}\)是最简分数(不是的话就给它约分一下),那么\(x,y\)一定分别是\(c,d\)的倍数。然后就出来了,答案就是\(min(\lfloor\frac{a}{c}\rfloor,\lfloor\frac{b}{d}\rfloor)\)

没啥用的代码
#incIude <bits/stdc++.h>
#define int long long
using namespace std;
int a,b,c,d;int gcd(int x,int y)
{if (y==0) return x;return gcd(y,x%y);
}
signed main()
{scanf("%lld%lld%lld%lld",&a,&b,&c,&d);int gd=gcd(c,d);c/=gd,d/=gd;printf("%lld",min(a/c,b/d));return 0;
}

C.Coffee Break

CF原题链接

题目大意:

给出\(n,m,d\)与一个长度为\(n\)的序列\(a\),每次删除操作可以从\(a\)中删除若干个数\(del\),使得这些数升序排序后\(del_{i}-del_{i-1}>d\)。求最少删除完整个序列\(a\)的操作次数,与每个数是在第几个操作删除的。\((1\leqslant n\leqslant 2\times 10^{5},1\leqslant d\leqslant m\leqslant 10^{9})\)

解题思路:

注意到时限为2s。记录序列\(a\)时顺便记录位置,然后升序排序\(a\)。可以想到对于\(a_{i}\)它一定可以影响到\(a_{j}\)满足\(a_{j}>a_{i}+d\),那么对于每个\(a_{i}\)二分查找第一个\(a_{j}\)并标记(每次查找一个即可),若当前\(a_{i}\)未被标记,说明需要一个新的操作,此时\(cnt++\)即可。

不做评价的代码
#incIude <bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+5;
int n,m,d;
struct node{int x,d;int used;bool operator < (const node &b) const{return x<b.x;}
}a[N];
int cnt;
int ans[N];signed main()
{scanf("%lld%lld%lld",&n,&m,&d);for (int i=1,x;i<=n;i++){scanf("%lld",&a[i].x);a[i].d=i;}sort(a+1,a+1+n);for (int i=1;i<=n;i++){if (a[i].used==0) a[i].used=++cnt;//没被选过,一定要加 ans[a[i].d]=a[i].used;int p=lower_bound(a+1,a+1+n,(node){a[i].x+d+1,0,0})-a;while (a[p].used&&p<=n) p++;//寻找下一个未操作过的a[p]if (p>n) continue;a[p].used=a[i].used;}printf("%lld\n",cnt);for (int i=1;i<=n;i++) printf("%lld ",ans[i]);return 0;
}

D.Glider

CF原题链接

题目大意:

可恶的翻译为什么不说输入不相交且是升序排列亏得我还想树状数组维护区间

给定高度\(h\)\(n\)个区间\([l,r]\),保证区间不相交且升序输入。在区间外每过一个单位长度,高度就会下降一个单位长度,在区间内高度不变 请想象原神的风之翼与风场。求能飞的最远距离\((1\leqslant n\leqslant2\times10^{5},1\leqslant h\leqslant 10^{9})\)

解题思路:

贪心地想,优的方案一定是从某个风场区间的左端点开始飞,所以枚举左端点,预处理出下降高度的前缀和,每次二分查找就行。

但是要注意前缀和乱七八糟的细节问题。

不做评价的代码
#incIude <bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+5;
int n,h;
int l[N],r[N],sum[N];
int ans;signed main()
{scanf("%lld%lld",&n,&h);for (int i=1;i<=n;i++){scanf("%lld%lld",&l[i],&r[i]);sum[i]=sum[i-1]+l[i]-r[i-1];//到第i个区间下降总高度的前缀和}for (int i=1;i<=n;i++){int p=lower_bound(sum+1,sum+1+n,sum[i]+h)-sum-1;ans=max(ans,r[p]-l[i]+(h+sum[i]-sum[p]));}printf("%lld",ans);return 0;
}

E.Tree Reconstruction

CF原题链接

题目大意:

给出\(n\),表示有一棵有\(n\)个节点的树,给出每条树边被删除后两个联通块中编号最大的两个结点\(x,y\),要求构造出满足条件的树,输出树边\((2\leqslant n\leqslant 1000)\)

解题思路:

小清新构造题。

可以想到,对于给出节点\(x,y\) 一定存在\(x=n\)\(y=n\)(因为\(n\)节点一定会是左联通块或右联通块中最大的),若存在一组\(x\neq n\)\(y\neq n\)那么一定无法构造。

我们可以构造一条链,这样所有\(x\)就相当于这条链上的前缀最大值(我们使\(x\)是另一个联通块的最大值)。将所有\(x\)排序,然后构造就行,无法构造就输出\(NO\)

为什么无法构造链就一定无法构造出满足要求的树呢?感性理解

虚空调试小技巧:双重循环全是\(i\)

难以描述的代码
#incIude <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1010;
int n;
int a[N];
bool flag[N];
int ans[N];signed main()
{scanf("%lld",&n);for (int i=1,aa,b;i<n;i++){scanf("%lld%lld",&aa,&b);if (aa>b) swap(aa,b);if (b!=n) { printf("NO"); return 0; }a[i]=aa;}sort(a+1,a+n);for (int i=1;i<=n;i++){if (a[i]!=a[i-1]) {ans[i]=a[i];flag[a[i]]=true;continue;}bool o=false;for (int j=1;j<=a[i];j++){if (!flag[j]) {ans[i]=j;flag[j]=true;o=true;break;}}if (!o) {  printf("NO"); return 0;  }}ans[n]=n;printf("YES\n");for (int i=1;i<n;i++) printf("%lld %lld\n",ans[i],ans[i+1]);return 0;
}

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

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

相关文章

猫映射(Arnold变换),猫脸变换介绍与基于例题脚本的爆破

前置信息 http://www.jiamisoft.com/blog/index.php/7249-erzhituxiangjiamisuanfaarnold.html https://mp.weixin.qq.com/s/IbkAlyAPvbgMeNgqfwisTg Arnold变换 Arnold变换是V.J.Arnold在遍历理论的研究中提出的一种变换,原意为catmapping,俗称猫脸变换。Arnold变换直观、简…

伯索云学堂视频课件课程下载工具,如何在电脑端下载伯索云学堂视频课程课件资料PDF,PPT到本地?

一. 安装伯索云课程下载器 1.获取学无止下载器 https://www.xuewuzhi.cn/plaso_downloader 2.下载安装后,然后点击桌面快捷方式运行即可。 注意:杀毒软件可能会阻止外部exe文件运行,并将其当做成病毒,直接添加信任即可,本软件绝对没有木马病毒。 二. 使用说明 1.学无止下载…

一个自托管免费开源的人脸识别系统

大家好,今天给大家分享一个自托管免费开源的人脸识别系统CompreFace。CompreFace 是一个开源的人脸识别系统,由 Exadel 公司开发并维护。它提供了一个基于深度学习的解决方案,用于人脸检测、识别和验证。 CompreFace 的设计旨在简化人脸识别技术的使用,使得开发者无需深入理…

洛谷题单指南-二叉堆与树状数组-P3374 【模板】树状数组 1

原题链接:https://www.luogu.com.cn/problem/P3374 题意解读:树状数组模版:单点修改,区间求值。 解题思路: 树状数组-Binary Index Tree可以动态维护一组数,可以O(logn)的修改一个数,也可以O(logn)的计算一段区间的和。 思考一下朴素做法:如何修改一个数,计算区间和?…

11月16日,工信部人才交流中心 CUUG - PGCP / PGCM认证考试完成!

2024年11月16日,由工业和信息化部人才交流中心 与 北京神脑资讯技术有限公司共同举办的PostgreSQL管理员岗位能力认证考试(PGCP中级/PGCM高级)完成。 中级PG认证专家-PGCP(PostgreSQL Certified Professional):是对PostgreSQL数据库技术能力的一种认可,达到了专家级别,…

manim边做边学--球体

Sphere类用于创建三维球体对象,它提供了丰富的参数和方法来定制球体的外观和行为。 球体在制作三维动画时,具有广泛的应用场景。 比如:展示几何概念:通过创建不同大小、颜色和透明度的球体,可以直观地展示几何中的体积、表面积等概念 物理模拟:在模拟物理现象(如重力、碰…

闵可夫斯基和

闵可夫斯基和 前言 部分图片来自 https://www.luogu.com.cn/article/mhp0aeub。 定义 对于两个向量集合 \(A,B\),它们的闵可夫斯基和为 \(\{ a+b | a \in A, b \in B\}\)。 求解 在 OI 中,我们一般研究凸包的闵可夫斯基和。 如图是两个凸包的闵可夫斯基和。本文来自博客园,作…

UNIAPP设置消息推送(v1.0),自定义铃声功能

目前项目需要开发一个物联网APP进行设备绑定、警情查看、统计分析、设备操作、自定义报警铃声等相关功能 采用的uniapp进行开发,功能其实都很简单就是调用SDK进行设备关联、数据的增删改查,逻辑清晰明了,没想到问题出在了消息推送这块, 消息推送-因为是uniapp进行开发所以采…

仓储和运输如何协同?项目管理在物流行业的应用

物流运输是现代经济的核心,覆盖了供应链的多个环节,从订单接收到仓储管理,再到运输配送,每一步都关系到效率和成本。然而,物流行业的复杂性也带来了管理难题,例如多部门协作不畅、运输计划不可控、资源分配不合理等。面对这些挑战,项目管理工具正逐步成为提升物流运输效…

6、oracle网络(监听)

oracle包含 1、软件 2、数据库 3、实例 4、监听(listener) 监听的特点 可以独立启动,就是说,数据库没有启动,监听可以启动;数据库启动,监听也可以不启动;数据库启动,监听也启动 监听和数据库是独立分开的数据库的整个网络结构图解: 1、数据库有数据库的名字:dbname;…

inline-block元素下移问题的分析及解决

不知道大家有没有遇到过这种蛋疼的情况,当你排列了三个 display 属性为inline-block的 div 时。我们在其中一个div中输入文字,就会出现如下这种现象,设置文字 div 的布局变化了。问题定位 为什么会出现这种情况呢?我们打开控制台查看一下元素布局,如下图我们能看到第二个 …

NOIP 模拟赛:2024-11-16

全体栽在 T1 ? T1:二分一下内存大小然后模拟判断。关键点在于意识到 "解码" 和 "播放" 这两种事件是分开的。用一个 while 循环,每次循环从 "完成某帧的解码"、"开始某帧的解码"、"播放某帧"、"删除某帧" 之间…