2024.4.5|牛客小白月赛90

2024.4.5|牛客小白月赛90

A.小A的文化节
B.小A的游戏
C.小A的数字
D.小A的线段(easy version)
E.小A的任务
F.小A的线段(hard version)

心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。
在这里插入图片描述

小A的文化节

题目
小A的学校举办了一年一度的文化节!
在文化节中有 n 个项目,其中参加第 i 个项目的欢乐度是 ai 。虽然小A很想把全部项目都体验一遍,但是她的时间是有限的,因此她只能参加其中的 m 个项目。
现在小A告诉你她参加了哪些项目,请你帮她计算一下她的欢乐度吧。

输入描述:

第一行两个正整数 n 和 m(1≤m≤n≤100) ,分别表示文化节总的项目数和小A参加的项目数。 第二行 n 个正整数,其中第 i 个数字
​ (1≤ai≤105 ) 表示参加第 i 个项目得到的欢乐度。 第三行 m 个正整数,其中第 i 个数字 (1≤b i≤n)
表示小A参加了编号为 bi的项目。数据保证 bi各不相同。

输出描述:

输出一行一个整数表示小A的欢乐度。

示例1
输入
5 3
1 2 3 4 5
1 3 5
输出
9

注意
A题是签到题。

实践代码:

void solve(){int n,m;cin>>n>>m;int sum=0;vector<int> a(n+1);for(int i=1;i<=n;i++) cin>>a[i];for(int i=0;i<m;i++){int x;cin>>x;sum+=a[x];}cout<<sum;
}

小A的游戏

题目
小A和小B在玩一个游戏,每局游戏的结果可能有胜平负三种。游戏的胜者得到 3 分,败者不得分,若打平则双方都得 1 分。
现在他们进行了若干局游戏,比分记录着小A为 X 分,小B为 Y 分。由于持续的时间太长了,他们不确定记录的比分是否是正确的了,请你来判断一下此时的比分是否合法吧。

输入描述:

多组测试。
第一行一个正整数
T(1≤T≤103) ,表示测试数据组数。
接下来 T 行,每行两个整数 X 和 Y(0≤X,Y≤109) ,分别表示比分所记录的小A和小B的分数。
小红希望你判断她的输出是否符合要求,你能帮帮她吗?

输出描述:

对于每组测试,如果合法输出一行 “Yes” ,否则输出 “No”(均不包含引号)。

示例1
输入
3
1 3
3 3
4 15
输出
No
Yes
No

注意
B题贪心。

实践代码:

void solve(){int x,y;cin>>x>>y;int ans=abs(x-y);if(ans%3==0) cout<<"Yes"<<endl;else cout<<"No"<<endl;
}

小A的数字

题目
小A给定一个数字 n ,请你帮她找出从低位对齐后任意一位均与 n 对应数位不同的最小正整数
对于本题题面描述中的从低位对齐后任意一位均与 n 对应数位不同,你需要保证你所输出的答案的位数小于 n 的位数时,即使在添加前导零至与 n 的位数相同后,也不应有任意一位的数字两两相同。

输入描述:

多组测试。
第一行一个正整数 T(1≤T≤103) ,表示测试数据组数。 对于每组测试数据,一行一个不含前导零的整数
n(2≤n≤109) ,表示所给的数字。

输出描述:

对于每组测试,输出一行一个正整数表示答案。

示例1
输入
3
2
10
101
输出
1
1
10

注意
C题,分为两种情况(n中包含0和不包含0的情况)和一种特殊情况(n只有一位)。如果包含0就找数字n从左向右第一次出现0的位数是在哪一位,然后将此位设置为1,(左边的默认为前导0,所以一定不会跟n在此位左边的任何一位有相同数字)然后从此位开始往右边位数找:遇1变0,遇除1以外其他数(0,2…9)变1;如果不包含0就只管个位数就行(其他位补充前导0即可);如果n只有个位数,则遇1变2(题目中要求最小正整数),遇除1以外其他数变1。本题用字符串处理比较方便。
举个栗子:
n:2103842
ans:10000

实践代码:

void solve(){string s,t;cin>>s;if(s.length()==1){if(s[0]=='1') {cout<<2<<endl;return;}cout<<1<<endl;return;}if(s.find("0")==string::npos){if(s[s.length()-1]=='1') {cout<<2<<endl;return;}cout<<1<<endl;return;}for(int i=0;i<s.length();i++){if(s[i]=='0') t+="1";else if(s[i]!='0') {t+="0";}}int pos;for(int i=0;i<t.length();i++){if(t[i]=='0') continue;else {pos=i;break;}}for(int i=pos;i<t.length();i++) cout<<t[i];cout<<endl;
}

小A的线段(easy version)

题目

本题为 easy version ,与 hard version 的区别仅为 m 的数据范围。

在一个标有 1−n 的数轴上给定 m 条线段,第 i 个线段的左右端点分别为 sti,edi ,求有多少种线段的选择方案可以使得数轴上的每个整数点至少被覆盖两次。

定义两种选择方案不同当且仅当至少有一个线段在两种方案中的状态(选/不选)不同。

由于方案数可能很多,所以你需要输出满足条件的方案数对 998244353 取模的结果。

输入描述:

第一行两个正整数 n(2≤n≤105) 和 m(1≤m≤10) ,分别表示数轴长度和线段个数。 接下来 m 行,每行两个正整数,其中第
i 行的两个正整数 sti 和 edi​ (1≤sti​<edi≤n) 分别表示第 i 条线段的起点和终点。

输出描述:

输出满足条件的方案数对 998244353 取模的结果。

示例1
输入
5 4
4 5
1 5
3 5
1 4

输出
3

注意
D题是一个典型的dfs+差分

实践代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define INF 0x3f3f3f3f
#define PII pair<int,int>
const int N = 1e5+10;
const int mod = 1e9+7;
int n,m,ans=0,use[12],l[12],r[12],a[N];//方案数ans,记录是否使用该线段use,左端点l,右端点r,差分数组a
void dfs(int now){if(now==m+1){//搜索到一条分枝的尽头memset(a,0,sizeof(a));for(int i=1;i<=m;i++){if(use[i]) {a[l[i]]++;a[r[i]+1]--;}//如果选了第i个线段,就用差分数组将两个端点包含的区间+1}int f=1;//f用来检查是否存在不满足要求的情况for(int i=1;i<=n;i++){a[i]+=a[i-1];//求差分数组的前缀和if(a[i]<2) f=0;//不满足数轴上每个整数点至少被覆盖2次的要求,将f置为0}if(!f) return;ans++;return;//都满足要求的,方案数ans+1}use[now]=1;//如果选now这条线段dfs(now+1);use[now]=0;//如果不选now这条线段dfs(now+1);}
void solve(){cin>>n>>m;for(int i=1;i<=m;i++) cin>>l[i]>>r[i];dfs(1);cout<<ans<<endl;
}
signed main(){ios::sync_with_stdio(false);cin.tie(0);cout<<fixed<<setprecision(2);//保留两位小数int t=1;//cin>>t;while(t--){solve();}return 0;
}

小A的任务

题目

小A现在需要完成有序的 A 类任务和 B 类任务各 n 个,初始时只有第 1 个 A 类任务可以进行。进行第 i 个 A 类任务需在完成第 i − 1 个 A 类任务之后,进行第 i 个 B 类任务需要在完成第 i 个 A 类任务之后。且在同一时刻只能进行 A 类和 B 类中的一类任务,同一类的任务只能同时进行一个,任何一个任务都至多完成一次。
总共有 q 次询问,每次询问你需要回答完成 k 个 B 类任务至少需要多长时间。

输入描述:

第一行两个整数 n(1≤n≤105) 和 q(1≤q≤100) ,分别表示任务个数与询问次数。

第二行 n 个整数,其中第 i 个数字 (1≤ai ≤109 ) 表示完成第 i 个 A 类任务所需要的时间。第三行 n 个整数,其中第 i 个数字 (1≤bi≤109) 表示完成第 i 个 B 类任务所需要的时间。

接下来 q 行,每行一个整数 k(1≤k≤n) ,表示询问。
输出描述:
对于每次询问,输出一行一个整数,表示询问结果。
示例1
输入
4 3
1 2 3 4
4 1 2 3
1
2
3
输出
4
8
13
示例2
输入
5 2
19 1 20 2 17
12 20 17 4 2
3
5
输出
75
114

备注
对于样例一的第一个询问,需要先完成前 2A 类任务,再完成第 2B 类任务。

注意
E题优先队列+枚举

实践代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define INF 0x3f3f3f3f3f3f3f3f//long long 1e19
#define PII pair<int,int>
const int N = 1e5+10;
const int mod = 1e9+7;
vector<int> a(N),b(N);
void solve(){int n,q;cin>>n>>q;for(int i=1;i<=n;i++) cin>>a[i];//A类任务for(int i=1;i<=n;i++) cin>>b[i];//B类任务int k;while(q--){cin>>k;priority_queue<int> qe;//大根堆(优先队列),存储当前b任务中最小的k个任务int ans=INF,sum=0,qesum=0;//当前优先队列中k个元素的总和qesumfor(int i=1;i<=n;i++){sum+=a[i];//a类任务时间直接加qe.push(b[i]);qesum+=b[i];//将b任务的第i个存进优先队列if(qe.size()>k) {qesum-=qe.top();qe.pop();}//此时优先队列的元素个数大于k,那么qesum就减去当前优先队列中最大的元素(用较小的元素替换最大的元素),保证所用时间最少if(qe.size()==k) ans=min(ans,sum+qesum);//记录做到当前k个b任务时的最优解(所用时间最少)}cout<<ans<<endl;}
}signed main(){ios::sync_with_stdio(false);cin.tie(0);cout<<fixed<<setprecision(2);//保留两位小数int t=1;//cin>>t;while(t--){solve();}return 0;
}

小A的线段(hard version)

题目

本题为 easy version ,与 hard version 的区别仅为 m 的数据范围。

在一个标有 1−n 的数轴上给定 m 条线段,第 i 个线段的左右端点分别为 sti,edi ,求有多少种线段的选择方案可以使得数轴上的每个整数点至少被覆盖两次。

定义两种选择方案不同当且仅当至少有一个线段在两种方案中的状态(选/不选)不同。

由于方案数可能很多,所以你需要输出满足条件的方案数对 998244353 取模的结果。

输入描述:

第一行两个正整数 n(2≤n≤105) 和 m(1≤m≤200) ,分别表示数轴长度和线段个数。 接下来 m 行,每行两个正整数,其中第
i 行的两个正整数 sti 和 edi​ (1≤sti​<edi≤n) 分别表示第 i 条线段的起点和终点。

输出描述:

输出满足条件的方案数对 998244353 取模的结果。

示例1
输入
5 4
4 5
1 5
3 5
1 4

输出
3

注意
F题跟D题的区别是m的范围,难度直接max。需要离散化+特判

在这里插入图片描述

实践代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define INF 0x3f3f3f3f3f3f3f3f
#define PII pair<int,int>
const int N = 1e5+10;
const int mod = 998244353;
int dp[404][404][404];
void add(int &x,int y){//相加取模x+=y;if(x>mod)x-=mod;//直接传x的值回本身
}
void solve(){int n,m;cin>>n>>m;vector<int>alls,s,t;vector<PII>a(m+1);for(int i=1;i<=m;i++){//将坐标点离散化cin>>a[i].first>>a[i].second;--a[i].first;//防止起点和终点重合误判,只要线段右端大于线段左端alls.push_back(a[i].first);//将点压入点的集合alls.push_back(a[i].second);}alls.push_back(0),alls.push_back(n);//还有0和nsort(alls.begin(),alls.end());//进行排序形成数轴alls.erase(unique(alls.begin(),alls.end()),alls.end());//删除重复的的点//用到unique函数,来去重auto get =[&](int x)->int{//定义一个函数参数为x,返回大于等于该数的值return lower_bound(alls.begin(),alls.end(),x)-alls.begin();//返回坐标};//不为普通函数,能在alls函数中找值//用lower_bound应该是前面减了1吧for(int i=1;i<=m;i++){auto [s,t]=a[i];//将a[i]装入s,t数组a[i]={get(s),get(t)};//再在alls中找相应的点的坐标}sort(a.begin(),a.end());//a数组值对应all点的下标n=alls.size();//离散点总点数dp[0][0][0]=1;//状态定义,dp[i][l][k]l表示0到l至少被覆盖两次,l到r表示被覆盖一次,r到n表示没有被覆盖//当l为0,r为0时,表示初始默认0被覆盖两次,初始状态就有一种情况,此时有0个线段for(int k=1;k<=m;k++){//表示m条线段for(int i=0;i<=n;i++){//表示lfor(int j=i;j<n;j++){//表示radd(dp[k][i][j],dp[k-1][i][j]);//先将前面的线段值赋给现在状态if(a[k].first<=i){//当当前线段的左端点小于l时满足状态条件add(dp[k][max(i,min(j,a[k].second))][max(j,a[k].second)],dp[k-1][i][j]);//l值为线段右端点与k比较大小后判断哪个点更近,近的之前表示覆盖两次以上//然后和标记覆盖两次以上的i进行大小比较更新大的那一个作为状态//加上没有这个线段的时候}}}}cout<<dp[m][n-1][n-1]<<"\n";}signed main(){ios::sync_with_stdio(false);cin.tie(0);cout<<fixed<<setprecision(2);//保留两位小数int t=1;//cin>>t;while(t--){solve();}return 0;
}

心有猛虎,细嗅蔷薇。再见了朋友~

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

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

相关文章

[报错解决]源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。

目录 报错信息解决办法 spring整合mvc时&#xff0c;遇到的404报错&#xff0c;梳理mvc知识供参考供 报错信息 解决办法 Controller RequestMapping("user") public class UserController {//spring整合webmvc// 请求地址 http://localhost:7070/user/quickRequest…

数据字典

文章目录 一、需求分析二、表设计&#xff08;两张表&#xff09;三、功能实现3.1 数据字典功能3.1.1 列表功能3.1.2 新增数据字典3.1.3 编辑数据字典 3.2 数据字典明细3.2.1 列表功能3.2.2 新增字典明细3.2.3 编辑字典明细 3.3 客户管理功能3.3.1 列表功能3.3.2 新增用户3.3.3…

Golang | Leetcode Golang题解之第11题盛最多水的容器

题目&#xff1a; 题解&#xff1a; func maxArea(height []int) int {res : 0L : 0R : len(height) - 1for L < R {tmp : math.Min(float64(height[L]), float64(height[R]))res int(math.Max(float64(res), tmp * float64((R - L))))if height[L] < height[R] {L} el…

【环境变量】基本概念理解 | 查看环境变量echo | PATH的应用和修改

目录 前言 基本概念&理解 注意的点 查看环境变量方法 PATH环境变量 PTAH应用系统指令 PTAH应用用户程序 命令行的修改&#xff08;内存级&#xff09; 配置文件的修改 windows环境变量 大家天天开心&#x1f642; bash进程的流程。环境变量在系统指令和用户…

Linux网卡IP地址配置错误的影响

在Linux系统中&#xff0c;网络配置是保持系统顺畅运行的关键一环。正确配置网卡的IP地址对于确保网络通信的准确性和效率至关重要。然而&#xff0c;如果在这个过程中发生错误&#xff0c;可能会带来一系列问题。让我们一起探讨一下&#xff0c;如果Linux网卡的IP地址配置错误…

Python+Yolov8框选位置目标识别人数统计计数

程序示例精选 PythonYolov8框选位置目标识别人数统计计数 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《PythonYolov8框选位置目标识别人数统计计数》编写代码&#xff0c;代码整洁&#…

测开——基础理论面试题整理

1. 测试流程 需求了解分析需求评审制定测试计划【包括测试人员、时间、每人负责的模块、测试的风险项以及预防】编写自动化测试用例 —— 测试评审【尽量丰富测试点】编写测试框架和脚本&#xff08;若是功能测试 可省去这步骤&#xff09;执行测试提交缺陷报告测试分析与评审…

Coursera上托福专项课程02:TOEFL Speaking and Writing Sections Skills Mastery 学习笔记

TOEFL Speaking and Writing Sections Skills Mastery Course Certificate 本文是学习 https://www.coursera.org/learn/toefl-speaking-writing-sections-skills-mastery 这门课的学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。 文章目录 TOEFL Speaking and Writing…

docker-ce部署

目录 1. 更新软件包列表 2. 安装必要的软件包&#xff0c;以允许 apt 使用 HTTPS 3. 添加 Docker 的官方 GPG 密钥 4. 设置 Docker CE 的稳定存储库 5. 再次更新包索引以及安装 Docker CE 6. 验证 Docker CE 是否正确安装 7. 将当前用户添加到 docker 用户组&#xff0c;…

Linux之shell脚本编辑工具awk

华子目录 概念工作流程工作图流程&#xff08;按行处理&#xff09; awk程序执行方式1.通过命令行执行awk程序实例 2.awk命令调用脚本执行实例 3.直接使用awk脚本文件调用实例 awk命令的基本语法格式BEGIN模式与END模式实例awk的输出 记录和域&#xff08;记录表示数据行&#…

【陈老板赠书活动 - 25期】- 《Effective Java》

陈老老老板&#x1f9d9;‍♂️ &#x1f46e;‍♂️本文专栏&#xff1a;赠书活动专栏&#xff08;为大家争取的福利&#xff0c;免费送书&#xff09; &#x1f934;本文简述&#xff1a;活就像海洋,只有意志坚强的人,才能到达彼岸。 &#x1f473;‍♂️上一篇文章&#xff…

行人重识别项目 | 基于Pytorch实现ReID行人重识别算法

项目应用场景 面向行人重识别场景&#xff0c;项目具有轻量化 (训练的时候也只需要 2GB 的显存占用)、性能好 (只使用 softmax 损失就能够达到 Rank188.24%, mAP70.68%)&#xff0c;另外提供友好的上手项目流程教程 项目效果&#xff1a; 项目流程 > 具体参见项目内README.…

利用Flutter混淆工具提高应用的反编译难度

在移动应用开发中&#xff0c;保护应用代码安全至关重要。Flutter 提供了简单易用的混淆工具&#xff0c;帮助开发者在构建 release 版本应用时有效保护代码。本文将介绍如何在 Flutter 应用中使用混淆&#xff0c;并提供了相关的操作步骤和注意事项。 &#x1f4dd; 摘要 本…

第十四届蓝桥杯大赛软件赛省赛

第十四届蓝桥杯大赛软件赛省赛 2.日期统计 小蓝现在有一个长度为 100 的数组&#xff0c;数组中的每个元素的值都在 0 到 9 的范围之内。 数组中的元素从左至右如下所示&#xff1a; 5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 …

【Linux】Linux C 编程

在 Windows 下编程首先就是安装对应的 IDE &#xff0c;然后在 IDE 里面进行代码编写和编译&#xff0c;但是在 Linux 下&#xff0c;这两个部分是分开的&#xff0c;比如我们可以使用 vim 编辑器编写代码&#xff0c;然后用 gcc 编译器编译代码。Ubuntu 下有一些可以进行编程的…

03-JAVA设计模式-工厂模式详解

工厂模式 工厂设计模式是一种创建型设计模式&#xff0c;它提供了一种封装对象创建过程的机制&#xff0c;将对象的创建与使用分离。 这种设计模式允许我们在不修改客户端代码的情况下引入新的对象类型。 在Java中&#xff0c;工厂设计模式主要有三种形式&#xff1a;简单工厂…

2023-01-05(星期四)-恶意垃圾邮件导致agenttesla变体感染,可能是originlogger

前言 参考1 参考2 OriginLogger是一个开源的日志记录器&#xff0c;用于在应用程序中记录和管理日志信息。它提供了一种简单而灵活的方式来记录各种级别的日志&#xff0c;包括调试信息、警告和错误消息等。 AgentTesla病毒主要通过钓鱼邮件进行传播&#xff0c;钓鱼邮件内容多…

C语言解决汉诺塔问题

背景 首先带大家了解一下汉诺塔问题 汉诺塔是一个典型的函数递归问题&#xff0c;汉诺塔描述了这样的场景&#xff0c;有三个柱子&#xff0c;A,B,C&#xff0c;A柱为起始柱&#xff0c;在A柱上面有若干大小不同的盘子&#xff0c;最下面的最大&#xff0c;最上面的最小&#x…

Spring Cloud介绍

一、SpringCloud总体概述 Cloud Foundry Service Broker&#xff1a;通用service集成进入Cloud Foundry Cluster&#xff1a;服务集群 Consul&#xff1a;注册中心 Security&#xff1a;安全认证 Stream&#xff1a;消息队列 Stream App Starters&#xff1a;Spring Cloud Stre…

【WEEK6】 【DAY1】DQL查询数据-第一部分【中文版】

2024.4.1 Monday 目录 4.DQL查询数据&#xff08;重点&#xff01;&#xff09;4.1.Data Query Language查询数据语言4.2.SELECT4.2.1.语法4.2.2.实践4.2.2.1.查询字段 SELECT 字段/* FROM 表查询全部的某某查询指定字段 4.2.2.2.给查询结果或者查询的这个表起别名&#xff08…