牛客小白月赛66
牛客小白月赛66_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com)
冒着期末挂科的风险打了打,缓解了一下网瘾,感觉还行
最近为了期末鸽了很多期的div3,一学期末就手痒想训,感觉再不打人要没了,结果就是预习期末也预习不进去,比赛也没打,这几天不知道在干什么,白白的浪费时间
19号才全部考完,还有8天才训练自由,md,心情非常不愉悦啊

A-先交换
小分类讨论
题意:

思路:
分类讨论即可
#include <bits/stdc++.h>
#define int long long
const int mxn=2e5+10;
const int mxe=2e5+10;
using namespace std;int n;
int a[mxn];
void solve(){cin>>n;for(int i=1;i<=n;i++) cin>>a[i];int ok=0;for(int i=2;i<=n;i++){if(a[i]<a[1]&&a[i]%2==1) ok=1;}if(a[1]%2==1) cout<<0<<'\n';else if(ok&&a[1]%2==0) cout<<1<<'\n';else cout<<-1<<'\n';
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int __=1;cin>>__;while(__--)solve();return 0;
}B-再交换
构造+小分类讨论
题意:

思路:
构造题,交换的两个数的位置一定是特殊的,考虑i=j的情况进行交换,这样就是小分类讨论
注意特判的情况,当两个串串完全相同时,不代表无解,还可以交换别的数来满足条件
在a数组找到第一个不是最小值的数,在b数组找到最后一个最小值,进行交换即可
#include <bits/stdc++.h>
#define int long long
const int mxn=2e5+10;
const int mxe=2e5+10;
using namespace std;int n;
string s,t;
void solve(){s.clear(),t.clear();cin>>n;cin>>s>>t;s=" "+s;t=" "+t;int mi=1e9;for(int i=1;i<=n;i++){mi=min(mi,s[i]-'a'+1ll);if(s[i]==t[i]) continue;else if(s[i]<t[i]){if(i==n) cout<<1<<" "<<1<<'\n';else cout<<n<<" "<<n<<'\n';return;}else{cout<<i<<" "<<i<<'\n';return;}}int ansi;for(int i=n;i>=1;i--){if(t[i]-'a'+1==mi){ansi=i;break;}}int p=1;while(s[p]-'a'+1==mi) p++;if(p!=1) cout<<p<<" "<<p-1<<'\n';else{cout<<1<<" "<<ansi<<'\n';}
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int __=1;cin>>__;while(__--)solve();return 0;
}C-空洞骑士
构造+大(小)分类讨论

思路:
首先这题是让我们构造位置,那位置肯定是特殊的
考虑一个0到1e9的数轴,中间的金币是随机分配的,我们只需要记录第一个金币和最后一个金币的位置,然后去考虑起点s的位置
三种情况:
s=0
s=中间某个位置
s=1e9

画个图就可以发现,s为中间那个位置的贡献一定比另外两种小
如果s在中间,贡献差不多就是1.5个p_end-p_start,但是如果s=0或1e9,贡献显然>2*(p_end-p_start),所以第二种情况可以直接淘汰了
那么讨论另外两种情况,然后算一算贡献就行
当s=0时,t取1e9或1,两种情况算贡献取大的那个
当s=1e9,t=1e9-1或1,两种情况算贡献取大的那个
我自己在写的时候把中间的那种情况也算进去了,但是不影响ac
#include <bits/stdc++.h>
#define int long long
const int mxn=2e5+10;
const int mxe=2e5+10;
const int end_p=1000000000;
using namespace std;int m;
int p[mxn];
void solve(){cin>>m;int p_mx=-1e9,p_mi=1e9;for(int i=1;i<=m;i++){cin>>p[i];p_mx=max(p_mx,p[i]);p_mi=min(p_mi,p[i]);}sort(p+1,p+1+m);int mx=-1e9,ansi;for(int i=1;i<=m;i++){if(mx<min(p_mx-p[i],p[i]-p_mi)){mx=min(p_mx-p[i],p[i]-p_mi);ansi=p[i];}}int a1=max(p_mx+p_mx-1ll,(long long)1e9);int a3=((1e9-1)-p_mi>p_mi?(1e9-1)-p_mi:p_mi)+1e9-p_mi;int a2=min(p_mx-ansi,ansi-p_mi)+p_mx-p_mi+(p_mx-ansi<ansi-p_mi?p_mi:1e9-p_mx);int ans_a=max(max(a1,a2),a3);//cout<<a3<<'\n';if(ans_a==a1){if(p_mx-1>1e9-p_mx) cout<<0<<" "<<1<<'\n';else cout<<0<<" "<<end_p<<'\n';}else if(ans_a==a2){if(p_mx-ansi<ansi-p_mi) cout<<ansi<<" "<<0<<'\n';else cout<<ansi<<" "<<end_p<<'\n';}else{if(1e9-1-p_mi>p_mi) cout<<end_p<<" "<<end_p-1<<'\n';else cout<<end_p<<" "<<0<<'\n';}
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int __=1;//cin>>__;while(__--)solve();return 0;
}D-障碍
枚举+前缀和
题意:

思路:
这道题只需要注意到x的取值范围,那么就很好做了,关键是比赛的时候还注意不到
L最大取2e5,那么x最大就是500,如果超过500那么答案就会是负的
遇到小数据,我们考虑暴力枚举就好了
去枚举拿掉多少个障碍,然后去维护最大的答案值
#include <bits/stdc++.h>
#define int long long
const int mxn=2e5+10;
const int mxe=2e5+10;
using namespace std;int n,m,x;
int a[mxn];
void solve(){cin>>n>>m;for(int i=1;i<=m;i++) cin>>a[i];a[0]=0,a[m+1]=n;int ans=-1e9;for(int len=0;len<=500;len++){for(int l=0;l<=m;l++){int r=l+len+1;ans=max(ans,a[r]-a[l]-len*len);}}cout<<ans<<'\n';
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int __=1;//cin>>__;while(__--)solve();return 0;
}E生成树与路径
图论+构造
题意:

思路:
关于图论的构造还没怎么写过
这道题的构造条件是:
1.n个点,m条边
2.最小生成树的大小是最短路大小
3.特殊条件是边是个排列
对于第一个条件,考虑构造1到n的一条链,并边长是1-n-1,这样就满足了第一个条件
然后因为要m条边,所以我们要继续连边,但是在连边的过程中要保证第一个条件
我们考虑这样连边:

#include <bits/stdc++.h>
#define int long long
const int mxn=2e5+10;
const int mxe=2e5+10;
using namespace std;int n,m,u,v,idx=0;
void solve(){idx=0;cin>>n>>m;for(int len=2;len<=n;len++){for(int l=1;l+len-1<=n;l++){int r=l+len-1;cout<<l<<" "<<r<<" "<<++idx<<'\n';if(idx==m) return;}}
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int __=1;cin>>__;while(__--)solve();return 0;
}F-球球大作战
贪心+反证法(?)+二分
题意:


思路:
我们要求的是,对于一个球,是否存在一种方法使得这个球作为最终的胜利者
首先是一个结论:其他n-1个球自相残杀之后,再和这个球去碰撞,这样这个球是最大值
证明:
反证法,如果该球和其他任意一个球撞击:
若这个球比较小,直接输掉
若这个球比较大,权值变成(a1+a2)/2,且a2<a1,所以权值不会变大,证毕
那么,其他n-1个球该怎么去撞可以最小化这n-1个球碰撞后的值呢,求出最好情况就可以看是否存在解法了
另一个结论就是:
这n-1个球从小到大排好序之后最大值和次大值碰撞可以使n-1个值碰撞之后的值最小
(另外n-1个球是无序的,所以可以考虑排序)
证明:
反证法:
考虑三个球,直接去计算它们的贡献:

注意到a1的贡献除了2,a2和a3的贡献除了4
因此先撞大的球会使贡献变小
证毕
如果我们就这样去枚举球,复杂度是O(n2)的,肯定T
但是对于两个球,如果权值较小的那个球都有解的可能性,那权值较大的一定有解
因为,权值较小的球,其他n-1个球碰撞之后的权值一定比除了那个权值较大的球其他n-1个球碰撞之后的权值来的大
所以满足了单调性,直接去二分刚好有解的权值的下标就好了,前提是数组排好序
#include <bits/stdc++.h>
#define int long long
const int mxn=2e5+10;
const int mxe=2e5+10;
using namespace std;int n,ans;
int a[mxn],b[mxn];
bool check(int x){int ans=a[n];for(int i=n-1;i>=1;i--){if(i==x) continue;ans+=a[i];ans/=2;}return ans<=a[x];
}
void solve(){cin>>n;for(int i=1;i<=n;i++) cin>>a[i],b[i]=a[i];sort(a+1,a+1+n);int l=1,r=n;while(l<=r){int mid=l+r>>1;if(check(mid)){ans=mid;r=mid-1;}else l=mid+1;}//cout<<ans<<'\n';int s=a[ans];for(int i=1;i<=n;i++){if(b[i]>=s) cout<<1;else cout<<0;}
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int __=1;//cin>>__;while(__--)solve();return 0;
}
相关文章:
牛客小白月赛66
牛客小白月赛66_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com)冒着期末挂科的风险打了打,缓解了一下网瘾,感觉还行最近为了期末鸽了很多期的div3,一学期末就手痒想训,感觉再不打人要没了,结果…...
加载sklearn新闻数据集出错 fetch_20newsgroups() HTTPError: HTTP Error 403: Forbidden解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理…...
图解LeetCode——剑指 Offer 53 - I. 在排序数组中查找数字 I
一、题目 统计一个数字在排序数组中出现的次数。 二、示例 示例 1 【输入】nums [5,7,7,8,8,10], target 8 【输出】2 示例 2: 【输入】nums [5,7,7,8,8,10], target 6 【输出】0 提示: 0 < nums.length < 10^5-10^9 < nums[i] < 10^9nums 是一…...
python 实现热门音乐分析 附代码+数据 +论文
项目概述: 本选取了抖音当下最热门的 400 首音乐,通过一系列方法提取每首歌的波形特征,再经过降维以及机器学习等手段,进行无监督学习对音乐数据进行聚类的同时训练并使用监督学习分类器进行音乐流派分类,并通过可视化方法呈现分类聚类效果。 关键词:特征提取,PCA 主成分…...
【2335. 装满杯子需要的最短总时长】
来源:力扣(LeetCode) 描述: 现有一台饮水机,可以制备冷水、温水和热水。每秒钟,可以装满 2 杯 不同 类型的水或者 1 杯任意类型的水。 给你一个下标从 0 开始、长度为 3 的整数数组 amount ,…...
再不跳槽,就晚了
从时间节点上来看,3月、4月是每年跳槽的黄金季! 以 BAT 为代表的互联网大厂,无论是薪资待遇、还是平台和福利,都一直是求职者眼中的香饽饽,“大厂经历” 在国内就业环境中无异于一块金子招牌。在这金三银四的时间里&a…...
Java 内存结构解密
程序计数器 物理上被称为寄存器,存取速度很快。 作用 记住下一条jvm指令的执行地址。 特点 线程私有,和线程一块出生。 不存在内存溢出。 虚拟机栈 每个线程运行时所需要的内存,称为虚拟机栈。 每个栈由多个栈帧组成,…...
ROS小车研究笔记2/11/2023:使用ssh远程登录小车
1 SSH简介: SSH全称Secure Shell,是一种建立在应用层的安全网络协议。其安全性又非对称加密(RSA)实现 对称加密:使用同一密钥对信息进行加密和解密,但是一旦该密钥被窃取就会威胁通信安全 非对称加密:使用公钥和私钥。…...
koa ts kick off 搭建项目的基本架子
koa ts kick off 使用ts开发koa项目的基本架子,便于平时随手调研一些技术 项目结构 ├── src │ ├── controller //controller层 │ ├── service //service层 │ ├── routes.ts //路由 │ └── index.ts //项目入…...
h2database源码解析-查询优化器原理
目录一、成本计算规则二、单表查询三、多表关联查询一、成本计算规则 h2的查询优化器基于成本的,因此在执行查询前,会基于成本计算使用哪个索引,如果涉及多表关联,还会计算不同表关联顺序的成本,最终基于最小成本得出…...
2月11日,30秒知全网,精选7个热点
///国产邮轮首制船将于今年5月底出坞,年底交付 浦东新区近期将发布相关政策支持包括外高桥造船在内的船舶产业发展 ///首批个人养老金理财产品名单发布:3家机构7只产品 中国理财网发布的信息显示,首批个人养老金理财产品名单发布࿰…...
vue组件的构成 <template> <script> <style>节点的使用 <
1.vue组件组成结构 每个.vue组件都由3部分构成,分别是: template ->组件的模板结构script ->组件的JavaScript行为style ->组件的样式 其中,每个组件中必须包含template模板结构,而script行为和style样式是可选的组成部分。 2.组…...
windows + vscode + rust
1 安装VSCODE略2 安装rust插件1、说明:第4步本人是一个一个点击状态。上图禁用按钮在没装之前是显示“安装”按钮,应该点击“安装”也可以。2、还需要安装C插件,搜索C即可,装微软的3 创建rust工程由于初次使用,不知道目…...
二十九、异常处理
目录 ①前言: ②常见的运行时异常 ③常见的编译时异常 ④异常的处理机制 ⑤自定义异常 ①前言: 1.什么是异常? 异常是程序在“编译”或者“执行”的过程中可能出现的问题,注意:语法错误不算在异常体系中。 比如: 数据索引越界异常&…...
RTOS之二环境搭建初识RTOS
参考:https://blog.csdn.net/kouxi1/article/details/123650688视频:https://www.bilibili.com/video/BV1b14y1c783/RTOS本质就是切换线程栈,栈换了环境就换了,一个重要的结构tcb(linux叫PCB或thread_info)…...
【Java】 JAVA Notes
JAVA语言帮助笔记Java的安装与JDKJava命名规范JAVA的数据类型自动类型转换强制类型转换JAVA的运算符取余运算结果的符号逻辑运算的短路运算三元运算符运算符优先级JAVA的流程控制分支结构JAVA类Scanner类Math 类random方法获取随机数Java的安装与JDK JDK安装网站:h…...
Java笔记-volatile和AtomicInteger
目录1. volatile1.1.什么是volatile1.2.JMM-Java内存模型2 验证volatile的特性2.1 可见性2.2.验证volatile不保证原子性2.3 volatile实现禁止指令重排序3.使用AtomicInteger解决volatile的不能实现原子性的问题3.2 AtomicInteger的方法说明:3.3 CAS3.4 应用1. volat…...
[标准库]STM32F103R8T6 高级定时器--PWM输出和带死区互补PWM输出
前言 STM32F103系列的MCU,相比普通的51单片机,在输出硬件PWM这个功能上要强不少,两者实现的方式都类似,都是通过一个定时器来启用硬件PWM输出,不过在输出PWM通道的数量上,32F103要强上不少。仅通过一个高级…...
Camtasia2023最新版电脑视频录屏记录编辑软件
在Mac或Wind上有各种可用的视频记录和编辑软件,其中Camtasia被称为视频记录器和视频编辑器。录屏软件Camtasia2023到底有什么特色功能?本文将帮助您选择理想的选择来开始视频捕获,创建和编辑。Camtasia2023是Mac/win平台上一款使用非常简单的…...
管理用户安全性
每个数据库用户帐户都包括以下项:唯一的用户名验证方法 默认表空间临时表空间用户概要文件初始使用者组帐户状态验证用户口令验证、外部验证、全局验证管理员验证操作系统安全性:• DBA 必须具有创建或删除文件的操作系统权限。• 普通数据库用户不应具有…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
