牛客 小白109 20250119

news/2025/1/27 19:35:05/文章来源:https://www.cnblogs.com/dianman/p/18691195

牛客 小白 109 20250119

牛客小白月赛109_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ

A:

题目大意:根据不等式求值

#include<bits/stdc++.h>using namespace std;int main()
{int n;cin>>n;if (n<=19375331) cout<<n;else cout<<19375332;return 0;
}

简单签到

B:

题目大意:给出一个序列,可以划分为两个子序列,判断从第一个子序列中选出 \(k_1\) 个元素的平均数能不能大于从第二个子序列中选出 \(k_2\) 个元素的中位数

#include<bits/stdc++.h>using namespace std;int a[100010];int main()
{int n,k1,k2;cin>>n>>k1>>k2;for (int i=0;i<n;i++) cin>>a[i];int mem=a[n-1];sort(a,a+n);if (a[n-1]==mem) cout<<"No";else cout<<"Yes";return 0;
}

诈骗题,首先要知道在一个序列 \(x\) 中设平均值为 \(a\),中位数为 \(b\) ,满足以下不等式

\[a\le max(x_1,x_2,\dots,x_n) \\ b\le max(x_1,x_2,\dots,x_n) \]

又因为子序列的最小元素个数为 \(1\)\(k_1,k_2\ge 1\),如果两个子序列都选出一个最大的元素(最优情况),只需要判断第一个子序列中能否存在一个原来序列中唯一的最大元素即可

C:

题目大意:给出一个 \(n\) ,每次给一个左右区间,将区间内的数依次标号,已经标号过的数不再重复标记,求第 \(k\) 个数的标号

#include<bits/stdc++.h>using namespace std;const long long mod=1e9+7;set<int> st;
int a[100010];
int cnt;int main()
{int n,q;cin>>n>>q;for (int i=1;i<=n+1;i++) st.insert(i); for (int i=0;i<q;i++){int op;cin>>op;if (op==1){int l,r;cin>>l>>r;int now=l;while(1){now=*st.lower_bound(now);if (now>r) break;a[now]=++cnt;st.erase(now);}}else{int x;cin>>x;cout<<a[x]<<endl;}}return 0;
}

初始化时将数组从左到右存进 set 中,表示没有被编号

  • 操作 \(1\):利用二分查找,找到在 set 中并且在 l,r 内的数,取出集合并编号,当找到下一个没有被编号的数在 l,r 外时,退出循环查找
  • 操作 \(2\):直接输出记录编号(没有被编号的数默认为 \(0\) )即可

D:

题目大意:

#include <bits/stdc++.h>using namespace std;int main()
{int n,m;long long sum=0;cin>>n>>m;vector<array<int,3>> a(n+1);vector<vector<pair<int,int>>> pos(n+2);for (int i=1;i<=n;i++) cin>>a[i][0];for (int i=1;i<=n;i++) cin>>a[i][1]>>a[i][2],sum+=a[i][2];for (int i=1;i<=n;i++) pos[a[i][0]].push_back({a[i][1],a[i][2]});vector<long long> dp(n+2,sum);dp[0]=0;for (int i=0;i<=n;i++){for (auto [b,v]:pos[i]) dp[i+m]=min(dp[i+m],dp[i]+b-v);dp[i+1]=min(dp[i],dp[i+1]);}cout<<sum+dp[n+1];return 0;
}

明显的动态规划问题,需要计算费用最小和:

\[ans=min\left[ \sum_{i=1}^n val_i+sum(b_k-val_k)\right] \]

\(\sum_{i=1}^nval_i\)考虑一头牛都不陪的情况,其中 \(sum(b_k-val_k)\) 表示陪第 \(k\) 头牛的精力值减去礼物值

前项的结果是一个给定的值,于是方程可以转化为:

\[ans=\sum_{i=1}^n val_i-min\left[sum(b_k-val_k)\right] \]

对于后项,就可以考虑动态规划求解

for (int i=1;i<=n;i++) pos[a[i][0]].push_back({a[i][1],a[i][2]});

pos 数组记录第 a[i][0] 天,可以陪的牛的精力与礼物值

vector<long long> dp(n+2,sum);
dp[0]=0;//第0天不用陪牛,dp为0
for (int i=0;i<=n;i++){//递推天数for (auto [b,v]:pos[i]) //遍历这一天能陪的牛dp[i+m]=min(dp[i+m],dp[i]+b-v);//更新陪这头牛的费用和dp[i+1]=min(dp[i],dp[i+1]);//递推到第二天
}

状态转移的方向有两个:

  • \(i\) 天的费用和从第 \(i-m\) 天递推而来(第 \(i-m\) 天陪了一头牛)
  • \(i\) 天的费用和从第 \(i-1\) 天递推而来(第 \(i-m\) 天没有陪牛)

从第 \(0\) 天开始递推,那么第 \(i\) 天的状态就会转移到这天之后,换言之,之后天数的状态需要从这天转移过去

\[\left\{ \begin{array}{l} dp_{i+m}=min(dp_i+m,dp_i+b_k-v_k)\\ dp_{i+1}=min({dp_i,dp_{i+1}}) \end{array} \right. \]

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

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

相关文章

Vue3+ElementPlus+Koa2 全栈开发后台系统

Vue3+ElementPlus+Koa2 全栈开发后台系统 9 18 第1章 项目规划/1-1.mp4 Vue3+ElementPlus+Koa2全栈开发后台系统@河畔一角 前端Vue3+ElementPlus后台Koa2+MongoDB 如何构建通用型的后台管理系统如何搭建完备的前后台系统架构 掌握开发工作技巧 开发概述全栈后台管理系统 架构设…

User Agent Switcher不改变客户端UA

描述 如图,下面这个软件。软件设置中,包含以下选项,有个选项是不改变客户端的UA(navigator全局对象)然而,就算不勾选这玩意,navigator依然没有被正常改变。获取UA 可以在下面的网站,查看当前浏览器环境UA。 https://tool.ip138.com/useragent/ 客户端(浏览器) const …

事件监听,Vue,Ajax

1.事件监听点击查看代码 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS事件</title>…

用M实现类似Lookup的等级查找(Power Query 之 M 语言)

问题:表1和表2,需要根据表2中金额下限的设置反应对应的等级(=LOOKUP(A2,D$2:E$4)的结果)。 let源1 = Excel.CurrentWorkbook(){[Name="表1"]}[Content], 源2 = Excel.CurrentWorkbook(){[Name="表2"]}[Content],查找 = (对应金额) =>let筛选行 = T…

用M实现类似Lookup的等级查找(Power Query)

问题:表1和表2,需要根据表2中金额下限的设置反应对应的等级(=LOOKUP(A2,D$2:E$4)的结果)。 let源1 = Excel.CurrentWorkbook(){[Name="表1"]}[Content], 源2 = Excel.CurrentWorkbook(){[Name="表2"]}[Content],查找 = (对应金额) =>let筛选行 = T…

题解:AT_abc373_g [ABC373G] No Cross Matching

前言 调整法真是好东西。 思路分析 如果你网络流题做得比较多的话,应该能感觉出来这道题有点像。 经过若干手摸,发现根本不存在无解的情况。 每次交叉时,我们一定可以将交叉的两条路径分开,如图:同时,根据四边形不等式,有蓝线段长度之和大于黄线段长度之和。 因此,我们…

再述 Dijkstra

再述 Dijkstra 学 Dijkstra 好久了,今天再学了一遍,感觉推翻了好多自己的知识…… 定义 一种用于求非负权值的图的单源最短路径的算法。 方法 已知:如果要求从起始点 s 到某一个点 x 的最短路径,显然只能从某一个已确认为最短路径的点转移。 给个图:假设我们的起始点是点 …

Docker 常见问题处理技巧

Docker 迁移存储目录默认情况系统会将 Docker 容器存放在 /var/lib/docker 目录下问题起因今天通过监控系统,发现公司其中一台服务器的磁盘块慢,随即上去看了下,发现 /var/lib/docker 这个目录特别大。由上述原因,我们都知道,在 /var/lib/docker 中存储的都是相关于容器的…

drools 规则引擎和 solon-flow 哪个好?solon-flow 简明教程

做电子政务的项目时,经常会有大量的业务逻辑变更,但其实里面的业务改动,其实就是一些业务逻辑变动。而程序员编写的代码也没有任何技术含量,跟着式样书逐字逐句的翻译就行。大量的 `if/else` 判断遍布整个项目,维护难度极大。而这个 solon-flow 流引擎,可以方便的将业务的…

drools 规则引擎和 solon-flow 哪个好? 规则引擎 solon-flow 简明教程

做电子政务的项目时,经常会有大量的业务逻辑变更,但其实里面的业务改动,其实就是一些业务逻辑变动。而程序员编写的代码也没有任何技术含量,跟着式样书逐字逐句的翻译就行。大量的 `if/else` 判断遍布整个项目,维护难度极大。而这个 solon-flow 流引擎,可以方便的将业务的…

D28 Service 代理模式

当访问Service的IP地址时,流量会转发到后端Pod,那这个转发是怎么实现的呢?Service是一个抽象的资源对象,主要用于定义端口映射规则。具体的流量转发工作由kube-proxy组件负责,它利用主机上的iptables和IPVS技术来实现具体的网络转发,如下图所示:kube-proxy组件默认使用i…

05_LaTeX之排版样式设定

本章内容将一览如何修改 $\LaTeX{}$ 的排版样式。05_\(\LaTeX{}\) 之排版样式设定 目录05_\(\LaTeX{}\) 之排版样式设定字体和字号字体样式字号选用字体宏包字体编码使用 fontspec 宏包更改字体在 ctex 宏包或文档类中更改中文字体使用 unicode-math 宏包配置 Unicode 数学字体…