牛客周赛53---DEF

D.小红组比赛

题目描述

          \,\,\,\,\,\,\,\,\,\,小红希望出一场题目,但是他的实力又不够,所以他想到可以从以前的比赛中各抽一题,来组成一场比赛。不过一场比赛的难度应该是有限制的,所以所以这一场比赛会给一个目标难度分数 target\rm targettarget 。
          \,\,\,\,\,\,\,\,\,\,小红选 nnn 场比赛,每场 mmm 个题,小红会从每一场选一道题,使其组成的题的难度分数尽量接近 target\rm targettarget 。小红想知道挑选的题的难度分数与 target\rm targettarget 相差的最小值是多少。

输入描述:

          \,\,\,\,\,\,\,\,\,\,第一行输入两个整数 n,m (1≤n≤100,1≤m≤20)n, m\ (1 \leq n \leq 100, 1 \leq m \leq 20)n,m (1≤n≤100,1≤m≤20) 代表小红选了 nnn 场比赛,每场比赛有 mmm 道题。\,\,\,\,\,\,\,\,\,\,此后 nnn 行,第 iii 行输入 mmm 个整数 ai,j (1≤ai,j≤50)a_{i,j}\ (1 \leq a_{i,j} \leq 50)ai,j​ (1≤ai,j​≤50) 代表第 iii 场比赛的第 jjj 道题的难度分数。\,\,\,\,\,\,\,\,\,\,最后一行输入一个整数 target (1≤target≤5000){\rm target}\ (1 \leq  {\rm target} \leq 5000)target (1≤target≤5000) 代表小红希望这一场比赛的难度分数。

输出描述:

          \,\,\,\,\,\,\,\,\,\,在一行上输出一个整数,表示挑选的题的难度分数与 target\rm targettarget 相差的最小值。

示例1

输入

复制3 3 1 4 7 2 5 8 3 6 9 10

3 3
1 4 7
2 5 8
3 6 9
10

输出

复制1

1

说明

          \,\,\,\,\,\,\,\,\,\,小红可以选第一场比赛的第一道题,第二场比赛的第一道题,第三场比赛的第二道题,这样挑选的题的难度分数为 1+2+6=91 + 2 + 6 = 91+2+6=9,与 target\rm targettarget 相差的最小值为 111。

做法

很明显的分组dp,有n场,每场选一个。数据范围也很明显。还有滚动数组的做法。

#include<bits/stdc++.h>//分组dp
using namespace std;
int n,m,t;
int a[110][30];
int dp[110][5010];//考虑了前i场的得分(0表示这个分数不存在,1则表示这个分数存在)
int main(){cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>a[i][j];}}cin>>t;dp[0][0]=1;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){for(int k=0;k<=5000;k++){if(dp[i][k+a[i][j]]==0) dp[i][k+a[i][j]]=dp[i-1][k];}}}int ans=0x3f3f3f3f;for(int i=0;i<=5000;i++){if(dp[n][i])ans=min(ans,abs(t-i));}cout<<ans<<endl;
}

E.折半丢弃

已知长度为 nnn 的序列 a1,a2,…,ana_1,a_2,\dots,a_na1​,a2​,…,an​ ,定义一次操作的过程为:选择任意一个元素,随后,将 ⌊ai2⌋\left \lfloor \dfrac{a_i}{2} \right \rfloor⌊2ai​​⌋(向下取整)添加到原序列的结尾,并将 aia_iai​ 从原序列中删除。
          \,\,\,\,\,\,\,\,\,\,你可以进行任意多次操作(也可以一次操作都不做),要求使得序列的 MEX\rm MEXMEX 最大。
          \,\,\,\,\,\,\,\,\,\,数组的 MEX\rm MEXMEX 定义为:没有出现在数组中的最小非负整数,例如,数组 {3,1,2}\{3,1,2\}{3,1,2} 的 MEX\rm MEXMEX 为 000 。

输入描述:

          \,\,\,\,\,\,\,\,\,\,每个测试文件均包含多个测试点。第一行输入一个整数 T (1≤T≤104)T\ (1\le T\le 10^4)T (1≤T≤104) 代表测试数据组数,每组测试数据描述如下:\,\,\,\,\,\,\,\,\,\,第一行输入一个整数 n (1≤n≤105)n\ (1\le n\le 10^5)n (1≤n≤105) ,代表序列的长度。\,\,\,\,\,\,\,\,\,\,第二行输入 nnn 个整数 a1,a2,…,an (0≤ai≤106)a_1,a_2,\dots,a_n\ (0\le a_i \le 10^6)a1​,a2​,…,an​ (0≤ai​≤106) 。数字彼此间通过空格间隔。\,\,\,\,\,\,\,\,\,\,除此之外,保证所有的 nnn 之和不超过 10510^5105 。

输出描述:

          \,\,\,\,\,\,\,\,\,\,对于每一个测试点,在一行上输出一个整数,代表当前序列的最大 MEX\rm MEXMEX 。

示例1

输入

复制4 6 0 1 2 4 8 12 5 1 2 4 8 12 4 0 1 3 4 10 1 1 1 2 1 3 2 2 1 1

4
6
0 1 2 4 8 12
5
1 2 4 8 12
4
0 1 3 4
10
1 1 1 2 1 3 2 2 1 1

输出

复制5 5 4 4

5
5
4
4

说明

          \,\,\,\,\,\,\,\,\,\,对于第一个测试点:\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,● 操作第 666 个元素 121212 ,随后将 ⌊122⌋=6\left \lfloor \dfrac{12}{2} \right \rfloor=6⌊212​⌋=6 加入到序列结尾,新的序列为 {0,1,2,4,8,6}\{0,1,2,4,8,6\}{0,1,2,4,8,6} ;\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,● 继续操作刚刚新加入的元素 666 ,随后将 ⌊62⌋=3\left \lfloor \dfrac{6}{2} \right \rfloor=3⌊26​⌋=3 加入到序列结尾,新的序列为 {0,1,2,4,8,3}\{0,1,2,4,8,3\}{0,1,2,4,8,3} ;\,\,\,\,\,\,\,\,\,\,此时,得到原序列的最大 MEX\rm {MEX}MEX 为 555 。可以穷举证明此时没有比 555 更大的答案。\,\,\,\,\,\,\,\,\,\,对于第二个测试点:\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,● 操作第 555 个元素,新的序列为 {1,2,4,8,6}\{1,2,4,8,6\}{1,2,4,8,6} ;\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,● 继续操作第 555 个元素,新的序列为 {1,2,4,8,3}\{1,2,4,8,3\}{1,2,4,8,3} ;\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,● 选择第 444 个元素操作,新的序列为 {1,2,4,3,4}\{1,2,4,3,4\}{1,2,4,3,4} ;\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,● 选择第 333 个元素操作,新的序列为 {1,2,3,4,2}\{1,2,3,4,2\}{1,2,3,4,2} ;\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,● 选择第 222 个元素操作,新的序列为 {1,3,4,2,1}\{1,3,4,2,1\}{1,3,4,2,1} ;\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,● 最后选择第 111 个元素,新的序列为 {3,4,2,1,0}\{3,4,2,1,0\}{3,4,2,1,0} ;\,\,\,\,\,\,\,\,\,\,此时,得到答案 MEX\rm MEXMEX 为 555 。

做法

最值,想到二分。我们可以直接二分答案

#include<bits/stdc++.h>
using namespace std;
int t,n,a[100010];
int mp[100010];
int isleft(int x){//可以达到xmemset(mp,0,sizeof(mp));int res=0;for(int i=1;i<=n;i++){if(mp[a[i]]==0&&a[i]<=x) mp[a[i]]++,res++;//0到x中没出现过的else{//大于x或出现过的int t=a[i];while(1){t/=2;if(t<=x&&mp[t]==0){//0到x中没出现过的mp[t]++;res++;break;}if(t==0) break;//t一直除以二,直到为0时,仍然没有满足条件}}}if(res-1==x) return 1;return 0;
}int main(){scanf("%d",&t);while(t--){scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d",&a[i]);sort(a+1,a+1+n);int l=-1,r=n+1;while(l+1<r){int mid=l+(r-l)/2;if(isleft(mid)) l=mid;else r=mid;}cout<<l+1<<endl;}
}

wa的原因

我的isleft函数里的mp用的是map,结果超时了,查了一下说是用map访问键值是会慢一点的。以后能用数组就用数组吧。

F.小红走矩阵
 

题目描述

          \,\,\,\,\,\,\,\,\,\,n×mn \times mn×m 的矩阵由障碍和空地组成,初始时小红位于起点 (1,1)(1, 1)(1,1) ,她想要前往终点 (n,m)(n,m)(n,m) 。小红每一步可以往上下左右四个方向的空地移动一格。
          \,\,\,\,\,\,\,\,\,\,小红在起点处可以进行最多一次操作:选择矩阵中的一处障碍替换为空地,但代价是小红必须选择失去向上下左右四个方向中一个移动的能力。
          \,\,\,\,\,\,\,\,\,\,求小红从起点到达终点的最小步数,如果无法到达则输出 −1-1−1 。

输入描述:

          \,\,\,\,\,\,\,\,\,\,第一行输入两个整数 n,m (1≤n,m≤1000)n, m\ (1 \leq n, m \leq 1000)n,m (1≤n,m≤1000) 代表矩阵的大小。\,\,\,\,\,\,\,\,\,\,此后 nnn 行,每行输入 mmm 个字符 a1a2…an (ai∈{a_1a_2\dots a_n\ (a_i\in\{a1​a2​…an​ (ai​∈{'X\rm XX','.\rm ..'})\})}) 描述矩阵中这一行的情况,其中 'X\rm XX'(Ascii:88)代表障碍,'.\rm ..'(Ascii:46)代表空地。保证起点和终点都是空地。

输出描述:

          \,\,\,\,\,\,\,\,\,\,在一行上输出一个整数,表示小红从起点到达终点的最小步数;如果无论怎么操作都无法到达,则直接输出 −1-1−1 。

示例1

输入

复制4 4 ..X. XXX. .X.. .X..

4 4
..X.
XXX.
.X..
.X..

输出

复制6

6

说明

          \,\,\,\,\,\,\,\,\,\,小红失去向上走的能力,消除 (1,3)(1, 3)(1,3) 处障碍,从起点到终点的最小步数为 666 。

示例2

输入

复制4 4 .XX. XXX. .X.. .X..

4 4
.XX.
XXX.
.X..
.X..

输出

复制-1

-1

说明

          \,\,\,\,\,\,\,\,\,\,小红最多只能删除一个障碍,无法到达终点。

做法

分层bfs,也就是vis开多几维,之前都是二维的。也是第一次遇到了。

#include<bits/stdc++.h>
using namespace std;
int n,m;
char a[1010][1010];
int sign;//标记是否能走到终点
int dx[]={-1,1,0,0};//上下左右
int dy[]={0,0,-1,1};
int vis[1010][1010][2][5];//第三思维是到a[i][j]时有没有使用操作,以及选择舍弃的方向
struct ty{int x,y;int dis;//距离int flag,k;//有没有使用操作,以及选择舍弃的方向
};
queue<ty> q;
void bfs(){q.push({1,1,0,0,0});//舍弃的方向与dx,dy数组的下标对应q.push({1,1,0,0,1});q.push({1,1,0,0,2});q.push({1,1,0,0,3});q.push({1,1,0,0,4});//正常走,没有舍弃方向while(!q.empty()){ty tmp=q.front();q.pop();int x=tmp.x,y=tmp.y,dis=tmp.dis,flag=tmp.flag,k=tmp.k;if(vis[x][y][flag][k]) continue;vis[x][y][flag][k]=1;for(int i=0;i<4;i++){int xx=x+dx[i],yy=y+dy[i];if(xx>n||xx<1||yy>m||yy<1) continue;if(k==i) continue;//舍弃的方向if(vis[xx][yy][flag][k]) continue;if(a[xx][yy]=='.'){q.push({xx,yy,dis+1,flag,k});}else{if(flag==1||k==4) continue;//操作过了或正常的走不舍弃方向q.push({xx,yy,dis+1,1,k});}if(xx==n&&yy==m) {cout<<dis+1;sign=1;return ;}}}
}
int main(){cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>a[i][j];}}bfs();if(!sign) cout<<-1;
}

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

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

相关文章

docker笔记7-dockerfile

docker笔记7-dockerfile 一、dockerfile介绍二、dockerfile指令三、构建自己的镜像 一、dockerfile介绍 Dockerfile是用来构建Docker镜像的构建文件&#xff0c;是由一系列命令和参数构成的脚本。 以下是常用的 Dockerfile 关键字的完整列表和说明&#xff1a; 二、docker…

【计算机毕业设计】838装修公司CRM系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

为什么要做边界值测试?

边界值测试的理解 边界值测试&#xff08;Boundary Value Testing&#xff09;是一种常用的软件测试方法&#xff0c;它侧重于测试输入值的边缘或临界条件。这些边缘条件通常包括最小值、最大值以及接近这些最小值和最大值的值。边界值测试的基本思想是&#xff0c;许多软件错…

React 学习——Context机制层级组件通信

核心思路&#xff1a;&#xff08;适用于所有层级&#xff0c;不仅仅是爷孙 父子&#xff09; createContext方法创建一个上下文对象在顶层组件 通过Provider组件提供数据在底层组件&#xff0c;通过useContext钩子函数使用数据 import { createContext, useContext } from …

R语言 爬取数据+简单清洗

小小练习。见代码注释 # 加载必要的包 library(rvest) library(dplyr) library(tidyr)# 指定网页URL url <- "https://research.un.org/en/unmembers/scmembers"# 读取网页内容 webpage <- read_html(url)# 提取所有表格节点 table_nodes <- html_nodes(web…

基于人工智能及大数据的综合智能交通管理平台(可编辑30页PPT)

引言&#xff1a;随着城市化进程的加速和汽车保有量的快速增长&#xff0c;交通拥堵、交通事故频发以及交通资源分配不均等问题日益突出&#xff0c;成为制约城市发展的重要因素。为了应对这些挑战&#xff0c;基于人工智能&#xff08;AI&#xff09;及大数据技术的综合智能交…

【React】详解自定义 Hook

文章目录 一、自定义 Hook 的基本用法1. 什么是自定义 Hook&#xff1f;2. 创建自定义 Hook3. 使用自定义 Hook 二、自定义 Hook 的进阶应用1. 处理副作用2. 组合多个 Hook3. 参数化 Hook4. 条件逻辑 三、自定义 Hook 的实际应用案例1. 实现用户身份验证2. 实现媒体查询 四、最…

民大食堂用餐小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;商家管理&#xff0c;档口号管理&#xff0c;商家餐品管理&#xff0c;餐品种类管理&#xff0c;购物车管理&#xff0c;订单信息管理 微信端账号功能包括&#xff1a;系统首页&a…

angular入门基础教程(七)系统路由

路由的实现 当我们系统越来复杂&#xff0c;功能越来越多&#xff0c;路由也就是必须的了。在 ng 中如何实现路由呢&#xff1f; 启用路由 在 app 目录下&#xff0c;新建一个 router 目录&#xff0c;把 app.routers.ts 文件拷贝过来&#xff0c;并修改一下。 import { Ro…

C语言程序设计16

程序设计16 问题16_1代码16_1结果16_1 问题16_2代码16_2结果16_2 问题16_3代码16_3结果16_3 问题16_1 函数 f u n fun fun 的功能是&#xff1a;逆置数组元素中的值。 例如&#xff0c;若形参 a a a 所指数组中的数据最初排列为 &#xff1a; 1 , 2 , 3 , 4 , 5 , 6 …

高职院校大数据人才培养成果导向系统构建、实施要点与评量方法

一、引言 在当今信息化快速发展的背景下&#xff0c;大数据已成为推动社会进步和产业升级的重要力量。为满足社会对大数据人才的需求&#xff0c;高职院校纷纷开设大数据相关专业&#xff0c;并致力于探索科学有效的人才培养模式。本文立足于我国信息化与智能化发展趋势&#…

【初阶数据结构】10.排序(1)

文章目录 1.排序概念及运用1.1 概念1.2 运用1.3 常见排序算法 2. 实现常见排序算法2.1 插入排序2.1.1 直接插入排序2.1.2 希尔排序2.1.2.1 希尔排序的时间复杂度计算 2.2 选择排序2.2.1 直接选择排序2.2.2 堆排序 1.排序概念及运用 1.1 概念 排序&#xff1a;所谓排序&#x…

如何用PostMan按照规律进行循环访问接口

①设置动态变量 步骤一: 设置环境变量 1. 创建环境变量集合 在 Postman 左上角选择 "环境"&#xff0c;然后点击 "添加" 来创建一个新的环境变量集合。给它起一个名称&#xff0c;比如 "uploadDemo". 2. 添加初始变量 在新创建的环境变量集…

基于python的百度迁徙迁入、迁出数据分析(三)

百度迁徙定义 百度迁徙释义&#xff1a; 百度迁徙以用户常住地所在地市或停留超过一天的非常住地定义为出发城市&#xff0c;以用户离开出发城市&#xff0c;并在非出发城市停留超过4 h以上定义为到达城市。采用4h阈值&#xff0c;排除了城际出行中的途经地。 定义参考来源…

filament 初使用记录

安装初始化 一、环境准备 官网要的 我安装的 二、下载安装 安装laravel composer create-project --prefer-dist laravel/laravel 项目名称 10.*导入 filament composer require filament/filament注册 filament 管理面板 php artisan filament:install --panels初始化…

freertos-HAL库-STM32Cubemax生成

打开cubemax选好型号配置RCC&#xff08;外部高速时钟&#xff09;这里查看原理图&#xff0c;我们把按键设为输入&#xff0c;led设为输出创建两个新任务&#xff08;default是系统创建的&#xff09;配置时钟&#xff0c;这里HSE是外部高速时钟&#xff0c;HSI是内部的&#…

axure10的安装与使用教程,问题整理

前言&#xff1a; axure10的安装与激活使用教程。 1、百度网盘下载相关资料 链接&#xff1a;https://pan.baidu.com/s/1OSD9J1wVuIptGxeRzwjlpA?pwddkbj 提取码&#xff1a;dkbj 2、开始安装&#xff0c;点击setup的安装包 除了更改地址外&#xff0c;其他的默认就行&…

Matlab编程资源库(15)数值积分

一、基本原理 求解定积分的数值方法多种多样&#xff0c;如简单的梯形法、辛普生(Simpson)法、牛顿&#xff0d;柯特斯(Newton-Cotes)法等都是经常采用的方法。它们的基本思想都是将整个积分区间[a,b]分成n个子区间[xi,xi1] &#xff0c;i1,2,…,n&#xff0c;其中 x 1a&#…

2024年PINN网络​还在火!发论文侧重点在哪儿?

2024年了&#xff0c;PINN网络依然火爆&#xff0c;各大顶会顶刊都能看见它的相关论文。 这是因为&#xff0c;AI交叉学科通常离不开求解偏微分方程PDE&#xff0c;而传统的求解方法受初始假设限制&#xff0c;一旦没设好就会导致很大的误差。 PINN作为一种新的思路&#xff…

气象水文耦合模WRF-Hydro建模技术

原文链接&#xff1a;气象水文耦合模WRF-Hydro建模技术https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247610398&idx4&sn34b4bbed4c74dcbbb0ac19ef8dcdaaff&chksmfa8271f9cdf5f8ef34ea6f721736a2fbbf8be896744ab7e46caa571c52a30628f056b4bd6964&t…