牛客小白月赛90(C\D\E)

C 小A的数字(思维,考虑特殊情况)

一、题目要求

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网

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

输入描述:

多组测试。

第一行一个正整数 T  (1≤T≤10^3)表示测试数据组数。

对于每组测试数据,一行一个不含前导零的整数 n(2≤n≤10^9),表示所给的数字。

输出描述:

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

示例1

输入

3
2
10
101

输出

1
1
10

二、思路

1.主要特殊考虑全1的情况,例如11,111,他们的最小整数为2

2.考虑该串数字全是在2~9之间,所以最大可以为1

3.例如121  变为10   122231   000000 然后如果最后一位原来是1,直接将倒数第1位变为2

1112  0000 -> 0001

4.总结:先将一个字符串里面,非0的数变为0,0变为1

a.先去考虑全1的情况

b.如果变完为0,则看原来的最后一位,若原来最后一位是‘1’,则最小正整数为2,若是其他情况就变为1

c.除了以上情况,其他就按原来的变化后的数字进行输出,例如1101  0010->  10

三、代码

#include<bits/stdc++.h>
#define endl '\n'
#define x first
#define y second
#define int long long
using namespace std;
typedef pair<int,int>PII;
const int N=2e5+10;
const int inf=0x3f3f3f3f;
int n,m;
void solve()
{cin>>n;int i,j;while(n--){int x;cin>>x;if(x<=99){if(x==11)cout<<2<<endl;elsecout<<1<<endl;}else{string s=to_string(x);int len=s.size();char p=s[len-1];int cnt=0;for(i=len-1; i>=0; i--){if(s[i]=='1')cnt++;if(s[i]!='0')s[i]='0';else if(s[i]=='0')s[i]='1';}int h=stoi(s);if(cnt==len){cout<<"2"<<endl;}else{if(h==0){if(p=='1')h=2;elseh=1;}cout<<h<<endl;}}}
}
signed main()
{int t=1;while(t--){//快输solve();}return 0;
}

 D 小A的线段(easy version)(二进制+差分)

一、题目要求

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网

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

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

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

输入描述:

第一行两个正整数 n(2≤n≤10^5)和 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

二、 思路

1.利用二进制,0表示不选,1表示选,时间复杂度一般为o(2^m*m),当m为[1,16],时间复杂度大约就是1e6左右,本题数据范围,m属于[1,10]

2.(i>>k)&1  判断第k位是否为1    (1<<m) 2^m

3.利用差分操作,对端点出进行处理。

三、代码

#include<bits/stdc++.h>
#define endl '\n'
#define x first
#define y second
#define int long long
using namespace std;
typedef pair<int,int>PII;
const int N=2e5+10;
const int inf=0x3f3f3f3f;
int n,m;
int l[N],r[N],f[N];
void solve()
{cin>>n>>m;int i,j;for(i=1;i<=m;i++){cin>>l[i]>>r[i];}int ans=0;for(i=0;i<(1<<m);i++){for(j=1;j<=n;j++)f[j]=0;for(j=0;j<m;j++)//枚举 {if((i>>j)&1)//判断第j位是否为1,为1 {//	cout<<i<<' '<<j<<endl; //选这条线段,进行差分操作 f[l[j+1]]++;f[r[j+1]+1]--;}}for(j=1;j<=n;j++){f[j]+=f[j-1];if(f[j]<2)break;}if(j>n)//从1~n 遍历过 {//cout<<"j="<<j<<endl;ans++; }}cout<<ans<<endl;
}
signed main()
{int t=1;while(t--){//快输solve();}return 0;
}

 E  小A的任务(思维+优先队列)

一、题目要求

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
小A现在需要完成有序的 A 类任务和 B 类任务各 n 个,初始时只有第 1 个 A 类任务可以进行。进行第 i 个 A类任务需在完成第 i − 1 个 A 类任务之后,进行第 i个 B 类任务需要在完成第 i 个 A 类任务之后。且在同一时刻只能进行 A类和 B类中的一类任务,同一类的任务只能同时进行一个,任何一个任务都至多完成一次。
总共有 q 次询问,每次询问你需要回答完成 k 个 B 类任务至少需要多长时间。

输入描述:

第一行两个整数 n (1≤n≤10^5)和 q (1≤q≤100)分别表示任务个数与询问次数。第二行 n 个整数,其中第 i个数字 ai  (1≤ai≤10^9)表示完成第 i 个 A 类任务所需要的时间。第三行 n个整数,其中第 i个数字 bi  (1≤bi≤10^9)表示完成第 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

备注:

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

二、思路

1.利用优先队列,priority_queue<int>q   默认大根堆,将A任务直接用前缀和

2.任务顺序:只有k个A任务完成后,才能从1~k个里面选择B任务;若cnt>k后,我们可以选择,完成前cnt个任务,再从1~cnt里面选择k个B任务而从这里面选择,自然从1~cnt里面选出来前k个最小的任务+a[cnt]最小则为最优解。

三、代码

#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
const int N=2e5+10;
const int inf=0x3f3f3f3f;
int n,t;
int a[N],b[N]; 
void solve()
{cin>>n>>t;int i,j,k;for(i=1;i<=n;i++){cin>>a[i];a[i]+=a[i-1];}for(i=1;i<=n;i++)cin>>b[i];while(t--){cin>>k;priority_queue<int>q;//默认大根堆,从大到小排 int sx=0,mx=1e18,cnt=0;for(i=1;i<=n;i++){if(i<=k)//先入队 前k个 {q.push(b[i]);sx+=b[i];cnt++;}else//当它>k之后 {int tt=q.top();if(b[i]<tt)//如果当前这个数,比已经入队的q队列里面的最大值还小 {q.pop();//将合适的b[i]入队后,队列里面有k个数 q.push(b[i]);//将其入队  sx=sx-tt+b[i];//更新所有的时间 } }if(cnt==k)mx=min(mx,sx+a[i]); }cout<<mx<<endl;} 
}
signed main()
{int t=1;while(t--){//快输solve();}return 0;
}

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

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

相关文章

大型语言模型(LLMs)面试常见问题解析

概述 这篇文章[1]是关于大型语言模型&#xff08;LLMs&#xff09;的面试问题和答案&#xff0c;旨在帮助读者准备相关职位的面试。 token&#xff1f; 在大型语言模型中&#xff0c;token 指的是什么&#xff1f; 分词&#xff08;Tokenization&#xff09;&#xff1a;可以将…

IDEA/PyCharm/GoLand同时打开2个分支

背景 想对比2个分支的代码&#xff0c;或者在A分支开发时&#xff0c;需要看B分支&#xff0c;切来切去太麻烦&#xff0c;而且新写的代码还没法直接切到B分支。 操作方法 假如有A、B 2个分支。 通过git worktree为B分支新建1个worktree&#xff0c;然后通过打开新项目的方式…

list使用与模拟实现

目录 list使用 reverse sort unique splice list模拟实现 类与成员函数声明 节点类型的定义 非const正向迭代器的实现 list成员函数 构造函数 尾插 头插 头删 尾删 任意位置插入 任意位置删除 清空数据 析构函数 拷贝构造函数 赋值重载函数 const迭代器的…

【c++】初阶模版与STL简单介绍

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 朋友们大家好&#xff0c;本篇文章介绍一下模版和对STL进行简单的介绍&#xff0c;后续我们进入对STL的学习&#xff01; 目录 模版1.泛型编程2.函数模板2.1函数模板的原理2.2模版的实例化…

03.28_111期_C++_vector特性和使用

如果写出vector这个类的时候不用缺省值&#xff0c;也不用初始化列表 那么可以编写如下构造函数&#xff0c;利用半缺省参数给没有初始化的vector实例进行赋空 但如果存在下面这两句话的设计 template <class InputIterator> vector(Inp…

前端学习<四>JavaScript基础——07-基本数据类型:Number

数值型&#xff1a;Number 在 JS 中所有的数值都是 Number 类型&#xff0c;包括整数和浮点数&#xff08;小数&#xff09;。 var a 100; // 定义一个变量 a&#xff0c;并且赋值整数100console.log(typeof a); // 输出变量 a 的类型​var b 12.3; // 定义一个变量 b&#…

大语言模型LLM《提示词工程指南》学习笔记02

文章目录 大语言模型LLM《提示词工程指南》学习笔记02设计提示时需要记住的一些技巧零样本提示少样本提示链式思考&#xff08;CoT&#xff09;提示自我一致性生成知识提示 大语言模型LLM《提示词工程指南》学习笔记02 设计提示时需要记住的一些技巧 指令 您可以使用命令来指…

【ubuntu】Vim配置记录

一、Vim介绍 vim是一个高度可定制的文本编辑器&#xff0c;有许多丰富的功能&#xff0c;扩展性极强&#xff0c;用户可以通过多种方式来增强vim vim有非常多的优点&#xff0c;例如高效率的移动&#xff0c;可以不用鼠标&#xff0c;完全用键盘操作&#xff0c;占用系统资源较…

159 Linux C++ 通讯架构实战14,epoll 函数代码实战

ngx_epoll_init函数的调用 //&#xff08;3.2&#xff09;ngx_epoll_init函数的调用&#xff08;要在子进程中执行&#xff09; //四章&#xff0c;四节 project1.cpp&#xff1a;nginx中创建worker子进程&#xff1b; //nginx中创建worker子进程 //官方nginx ,一个…

深入解析Python的lxml库:高效处理XML和HTML的利器

更多Python学习内容&#xff1a;ipengtao.com Python中的lxml库是一个强大的XML和HTML处理库&#xff0c;它基于libxml2和libxslt库&#xff0c;提供了高效的XML解析和处理功能。本文将详细介绍lxml库的安装、特性、基本功能、高级功能、实际应用场景和总结&#xff0c;帮助读者…

phpstorm设置头部注释和自定义注释内容

先说设置位置&#xff1a; PhpStorm中文件、类、函数等注释的设置在&#xff1a;setting-》Editor-》FIle and Code Template-》Includes-》PHP Function Doc Comment下设置即可&#xff0c;其中方法的默认是这样的&#xff1a; /** ${PARAM_DOC} #if (${TYPE_HINT} ! "…

Unity与CocosCraetor对比学习三

一、计时器 1.在Creator中 void start() {// js中的计时器// 延迟1秒后执行一次&#xff0c;不受Cocos限制setTimeout(() > {console.log("haha");}, 1000);// 每隔1秒执行一次setInterval(() > {console.log("haha");}, 1000);// creator中的计时…

计算机网络的分层结构及模型

1.计算机网络分层的基本原则 &#xff08;1&#xff09;各层之间相互独立&#xff0c;每层只实现一种相对独立的功能 &#xff08;2&#xff09;每层之间的交互尽可能少 &#xff08;3&#xff09;结构上可分割开&#xff0c;每层都采用最合适的技术来实现 &#xff08;4&…

Linux第4课 Linux的基本操作

文章目录 Linux第4课 Linux的基本操作一、图形界面介绍二、终端界面介绍 Linux第4课 Linux的基本操作 一、图形界面介绍 本节以Ubuntu系统的GUI为例进行说明&#xff0c;Linux其他版本可自行网搜。 图形系统进入后&#xff0c;左侧黄框内为菜单栏&#xff0c;右侧为桌面&…

在订单流程中锁定库存的最佳时机

目录 1. 用户点击结算时锁定库存 2. 用户提交订单时锁定库存 3. 用户支付成功后锁定库存 最佳时机选择 1. 用户点击结算时锁定库存 优点&#xff1a;确保用户在决定购买时商品是可用的&#xff0c;增加了用户的购买信心。缺点&#xff1a;如果用户在结算后放弃购买&#x…

嵌入式开发中内存管理与优化

内存管理与优化 在嵌入式开发中&#xff0c;内存管理是一项至关重要的任务&#xff0c;直接影响到系统的稳定性和性能。由于嵌入式设备通常资源有限&#xff0c;尤其是内存资源&#xff0c;因此内存管理与优化显得尤为重要。 具体实现 1. 静态内存分配 静态内存分配是指在编…

[HackMyVM]靶场Birthday

难度:Hard kali:192.168.56.104 靶机:192.168.56.149 端口扫描 ┌──(root㉿kali2)-[~/Desktop] └─# nmap 192.168.56.149 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-06 10:39 CST Nmap scan report for 192.168.56.149 Host is up (0.00016s latency). N…

硬件-1、体系架构

cpu 处理器 arm处理器的七种工作模式 arm寄存器 两张图是一样的&#xff0c;r0---r12是通用寄存器。其他寄存器可参考图一&#xff0c;cpu架构。 程序状态寄存器psr&#xff08;cpsr/spsr&#xff09; 程序异常处理 理解示例 当使用swi&#xff08;软中断指令&#xff09;指令…

【VMware Workstation】启动虚拟机报错“此主机支持 AMD-V,但 AMD-V 处于禁用状态”

问题出现步骤&#xff1a; 打开虚拟机&#xff1a; 然后报错&#xff1a; “此主机支持 AMD-V&#xff0c;但 AMD-V 处于禁用状态。 如果已在 BIOS/固件设置中禁用 AMD-V&#xff0c;或主机自更改此设置后从未重新启动&#xff0c;则 AMD-V 可能被禁用。 (1) 确认 BIOS/固件设…

机器学习KNN最邻近分类算法

文章目录 1、KNN算法简介2、KNN算法实现2.1、调用scikit-learn库中KNN算法 3、使用scikit-learn库生成数据集3.1、自定义函数划分数据集3.2、使用scikit-learn库划分数据集 4、使用scikit-learn库对鸢尾花数据集进行分类5、什么是超参数5.1、实现寻找超参数5.2、使用scikit-lea…