牛客小白月赛65

news2025/2/23 13:22:22

题目链接

牛客小白月赛65

  • A-牛牛去购物(枚举)
  • B-牛牛写情书(字符串)
  • C-牛牛排队伍(模拟)
  • D-牛牛取石子(博弈)
  • E-牛牛的构造(构造,思维)

A-牛牛去购物(枚举)

题目描述

牛牛带着 n n n元钱去超市买东西,超市一共只有两款商品,价格为 a a a元的篮球和价格为 b b b元的足球,牛牛想把手里的钱尽可能花光,请问牛牛最少能剩多少钱?

输入描述:

输入一行,三个正整数 n , a , b ( 1 ≤ n , a , b ≤ 1000 ) n,a,b (1 \leq n,a,b \leq 1000) n,a,b(1n,a,b1000), n n n表示牛牛现有的钱数, a a a表示一个篮球的单价, b b b 表示一个足球的单价。

输出描述:

输出一行一个整数,代表牛牛最少能剩下的钱数。

题解:

枚举每种情况取剩下的最下钱数即可

#include <iostream>
#define int long long
using namespace std;
inline int min(int a,int b){return a>b?b:a;}
void solve(){
    int n,a,b;
    cin>>n>>a>>b;
    int ans=n;
    for(int i=0;i<=n/a;i++){
        for(int j=0;j<=n/b;j++){
            int x=n-a*i-b*j;
            if(x>=0){
                ans=min(ans,x);
            }
        }
    }
    cout<<ans;
}

signed main(void){
    int _=1;
    //cin>>_;
    while(_--)solve();
    return 0;
}

当然也可以简化代码
直接遍历花钱数从买0个篮球遍历到买n/a个篮球即可

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n,a,b,big=200000;
    cin>>n>>a>>b;
    for(int i=0;i<=n;i+=a)
    big=min(big,(n-i)%b);
    cout<<big;
    return 0;
}

B-牛牛写情书(字符串)

在这里插入图片描述
在这里插入图片描述
题解:

遍历选取出原字符串中所有小写字母,然后再直接找字串即可
如果没找到输出NO

#include <iostream>
#define int long long
using namespace std;
inline int min(int a,int b){return a>b?b:a;}
void solve(){
    int n,m;cin>>n>>m;
    string k,s;
    cin>>s>>k;
    string ss;
    for(int i=0;i<s.size();i++)
        if(s[i]>='a'&&s[i]<='z')
            ss+=s[i];
    if(ss.find(k)==string::npos)cout<<"NO";
    else cout<<"YES";
}

signed main(void){
    int _=1;
    //cin>>_;
    while(_--)solve();
    return 0;
}

C-牛牛排队伍(模拟)

在这里插入图片描述
示例1
输入

5 4
2 1
1 3
2 5
2 4

输出

0
4
2

题解:

其实就是一个队伍或者是队列。
那么叫走一个就要改变当前队列后一个的前者。
但因为叫走顺序不定,所以我们不仅要记录当前队列每位的前一位是谁,还要记住后一位是谁。
如果单纯用bool数组去记录当前位走没走,后续遍历很耗时间,直接TLE
其实就是双链表

#include <iostream>
#define int long long
using namespace std;
inline int min(int a,int b){return a>b?b:a;}
inline int read(){
    int ans=0;
    int f=1;char ch;
    while((ch=getchar())<'0'||ch>'9')if(ch=='-')f=-1;
    do ans=(ans<<3)+(ans<<1)+(ch^48); while((ch=getchar())>='0'&&ch<='9');
    return f*ans;
}
const int N = 1e6+10;
int b[N];
int a[N];
void init(int n){
    for(int i=1;i<=n;i++){
        a[i]=i-1;
        b[i]=i+1;
    }
        
}
void solve(){
    int n=read(),k=read();
    init(n);
    while(k--){
        int chose=read(),x=read();
        if(chose==1){
            a[b[x]]=a[x];
            b[a[x]]=b[x];
            
        }
        else if(chose==2){
            printf("%d\n",a[x]);
        }
    }
}

signed main(void){
    int _=1;
    //cin>>_;
    while(_--)solve();
    return 0;
}

D-牛牛取石子(博弈)

在这里插入图片描述
示例1
输入

2
1 2
3 3
输出

niuniu
niumei

题解:

一开始看这道题,想着直接博弈,打一个巴什游戏的输赢条件即可。
后面想着又没那么简单,有两堆,其实决定胜负的是少石头的那一堆。
就加了一个判断和交换。
后面还是错的
这题的特例就是两堆石头相同的情况

下面是特例考虑:

考虑4和4:先手操作后,得到3和2,后手拿1和2,剩下2和0,先手败。
其实上面的分析默认了一个条件:针对最小堆进行策略操作后不会改变原来两堆的相对大小,而当两堆相等时:

模3得1时:还是上面的例子,4和4,令另第一个4为较小值,先手要将其变为3的倍数,选择操作1,变为的3和2改变了一开始的“大小关系”,这时不是第一堆最小了,而是第二堆的2,2模3不为0,这对后手而言是“必胜态”。
模3得2时:例如5和5,令第一个5为较小值,进行操作2,变为3和4,仍是第一堆较小,未改变大小关系,先手赢。

#include <iostream>
#define int long long
using namespace std;
void solve(){
    int a,b;cin>>a>>b;
    if(a>b)swap(a,b);
    if(a%3==0||(a==b&&a%3==1))cout<<"niumei\n";
    else cout<<"niuniu\n";
}

signed main(void){
    int _=1;
    cin>>_;
    while(_--)solve();
    return 0;
}

E-牛牛的构造(构造,思维)

在这里插入图片描述
题解:

注:以下出现运算全都向下取整
如果考虑最大全排列,如果一个数 x x x放在前面,那么后面就有 x − 1 x-1 x1个比他小的数,那么该数字能到达 k k k提供 l o g 2 ( i ) log_2(i) log2(i)个值,直接从大到小遍历,如果最大全排列无法满足 k k k就输出-1
如果能满足,例如需要 l o g 2 ( x ) log_2(x) log2(x)个贡献,那么就把 x x x放在 0 到 ( x − 1 ) 0到(x-1) 0(x1)的前面,使得式子可以成立, x x x可以做出 l o g 2 ( x ) log_2(x) log2(x),如果贡献值刚好到了 k k k,那么这个数组就是存在的,因为考虑贡献是从最大的开始,那么队列就是从最大的开始放,最后放入数组的时候直接放就可以了,就可以保证小于其值的数字都在后面,当然,我们仅仅需要队列里面的值提供贡献,那么就表明如果没有进队列的值贡献一定为 0 0 0,那么最后就正向遍历没有出现过的即可,这样出来的剩余值,小的在前面大的在后面,通过题目式子运算,一定为负数,不可能有贡献!!!

#include <iostream>
#include <queue>
#include<vector>
#include <cmath>
#define int long long
using namespace std;
const int N = 1e6+10;
//int a[N];
vector<int>a;
queue<int >q;
bool b[N];
void init (int n);
void Print(int n){
    int flag=1;
    for(int i=0;i<a.size();i++){
        if(flag)cout<<a[i];
        else cout<<' '<<a[i];
        flag=0;
    }
}
void solve(){
    int n,k;
    cin>>n>>k;
    //init(n);
//     if(k>(n-1)*n/2){
//         cout<<-1;return ;
//     }
    for(int i=n;i>=1;i--){
        if(k>=log2(i)){
            q.push(i);
            k-=log2(i);
        }
        if(k==0)break;
    }
    if(k>0){cout<<-1;return ;}
    while(!q.empty()){
        int x=q.front();
        b[x]=true;
        a.push_back(x);
        q.pop();
    }
    
    for(int i=1;i<=n;i++){
        if(b[i]==false)a.push_back(i);
    }
    Print(n);
}
void init (int n){
//     for(int i=n;i>=1;i++){
//         a[i]=i;
//     }
    a.resize(n+1);
}
signed main(void){
    int _=1;
    //cin>>_;
    while(_--)solve();
    return 0;
}

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

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

相关文章

怎么免费使用 ChatGpt,实用!

最近发现了一个可以免费、轻松使用 ChatGpt 的方法&#xff0c;随即做个记录&#xff0c;留着备忘&#xff0c;以后想用也能随时找到方法。 但是不保证该方法永远有效&#xff0c;仅当下有限&#xff0c;做个记录罢了。 因为我使用的是 windows 自带的浏览器 Microsoft Edge &a…

Android--刷机与adb

目录 一、Android设备启动流程 二、刷机模式介绍 三、Windows命令行 四、adb介绍与配置 五、常用的adb命令 一、Android设备启动流程 Android就是Linux内核(Kernel)Java虚拟机(JVM) Android设备启动就分为两个阶段&#xff1a; Linux启动 1.启动电源以及系统启动&#…

详解c++STL—容器list

目录 1、list基本概念 1.1、概念描述 1.2、结点的组成 1.3、list的优点 1.4、list的缺点 1.5、总结 2、list构造函数 2.1、功能描述 2.2、函数原型 2.3、示例 3、list赋值和交换 3.1、功能描述 3.2、函数原型 3.3、示例 4、list大小操作 4.1、功能描述 4.2、函…

ChatGPT的前世今生——混沌初开

目录 ChatGPT的前世今生——混沌初开ChatCPT简介ChatCPT是什么&#xff1f;ChatCPT的火爆程度ChatCPT火爆的原因1、功能强大&#xff0c;应用范围广泛2、训练数据量大&#xff0c;模型效果好3、优秀的商业模式 OpenAI公司公司创始团队 总结公众号文章链接参考链接&#xff1a; …

03C++类与对象之运算符重载

文章目录 C类与对象之运算符重载与const成员运算符重载赋值运算符重载运算符重载 日期类的实现与运算符重载赋值运算符重载比较类运算符的重载二元运算符-的重载前置和后置重载 总体实现代码const成员const的好处1.防止程序员犯错2.提高代码的复用性 const 成员与函数重载规则 …

Qt文件系统源码分析—第三篇QDir

深度 本文主要分析Windows平台&#xff0c;Mac、Linux暂不涉及 本文只分析到Win32 API/Windows Com组件/STL库函数层次&#xff0c;再下层代码不做探究 本文QT版本5.15.2 类关系图 QTemporaryFile继承QFile QFile、QSaveFile继承QFileDevice QFileDevice继承QIODevice Q…

由浅入深Netty基础知识IO相关

目录 1 stream vs channel2 IO 模型3 零拷贝3.1 传统 IO 问题3.2 NIO 优化 4 AIO4.1 文件 AIO4.2 守护线程4.3 网络 AIO 1 stream vs channel stream 不会自动缓冲数据&#xff0c;channel 会利用系统提供的发送缓冲区、接收缓冲区&#xff08;更为底层&#xff09;stream 仅支…

unity学习遇到的问题:解决VS不能加载Unity脚本,MonoBehaviour是灰色的

电脑出了点问题&#xff0c;然后就重装了&#xff0c;重装之后&#xff0c;从gitee上下载了原来的半截代码&#xff0c;结果发现里面的脚本运行出问题了&#xff0c;仔细一看&#xff0c;MonoBehaviour是灰色的&#xff0c;也就是说&#xff0c;加载不了unity的api了&#xff0…

目标检测复盘 --3. RCNN

RCNN的CNN部分使用AlexNet作为backbone来提取特征&#xff0c;Fast RCNN使用了VGG16来作为backboneRCNN将2000个框送入网络提取特征&#xff0c;Fast RCNN是将图像送入CNN来提取特征得到一个特征图将SS(Selective Search)算法获取的提议框映射到上面的特征图上&#xff0c;获取…

怎么通过ssh连上ipv6的服务器?阿里云怎么配置ipv6?wsl2怎么支持ipv6?

最近在研究ipv6&#xff0c;光调通环境居然让我折腾了好多回&#xff0c;现在终于通了 在这里提一句&#xff0c;IPV6和IPV4是两种东西&#xff0c;不要想着ipv6兼容ipv4&#xff0c;你就当它是全新的东西 1.前置条件 1.1我的电脑能访问ipv6 测试通过就代表你电脑可以访问ip…

Redis 哨兵模式的实现详解

文章目录 高可用&#xff08;HA&#xff09;哨兵模式概述哨兵的搭建伪集群 哨兵1. 复制sentinel.conf文件2. 修改sentinel.conf文件3. 新建sentinel26380.conf4. 启动并关联Redis集群5. 启动Sentinel集群6. 查看 Sentinel 信息7. 查看 Sentinel 配置文件 哨兵优化配置 高可用&…

【腾讯云Finops Crane集训营】降本增效神器Crane实战记录

本章目录 前言一、Crane是什么&#xff1f;Crane的主要功能&#xff1f;FinOps 是什么Prometheus是什么Grafana是什么 二、不得不面对的问题&#xff1a;云上资源效能挑战&#xff01;三、云原生场景下的成本优化挑战&#xff1f;四、K8s原生能力的不足五、Crane智能调度助力成…

Linux命令之vim/vi

目录 vim/vi简介 vi/vim 的使用 操作实例 总结 vim/vi简介 所有的 Unix Like 系统都会内建 vi 文书编辑器&#xff0c;其他的文书编辑器则不一定会存在。但是目前我们使用比较多的是 vim 编辑器。Vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程…

i.MX6ULL - 远程视频监控方案实现(nginx-rtmp流媒体服务器、ffmpeg推流)

i.MX6ULL - 远程视频监控配置&#xff08;nginx-rtmp流媒体服务器、ffmpeg推流&#xff09; 目录 i.MX6ULL - 远程视频监控配置&#xff08;nginx-rtmp流媒体服务器、ffmpeg推流&#xff09;1、前言2、buildroot文件系统构建2.1 勾选alsa-utils&#xff08;选做&#xff1a;如果…

桥接模式与NAT模式的区别以及设置静态IP

概述 日常我们都会使用到虚拟机&#xff0c;本文章以VMware虚拟机为例&#xff0c;主要介绍下虚拟机设置桥接模式与NAT模式的区别&#xff0c;并通过示意图进行讲解。并且会介绍如何去设置静态IP。 模式介绍 NAT模式NAT模式下 &#xff0c;创建出来的虚拟机只能访问当前主机…

基于ensp的跨地区的校园网组网方案

本博客是基于模拟器ensp的校园网组网方案&#xff0c;有总校区和分校区&#xff0c;主要用了vlan划分、dhcp、nat、ospf、acl、bgp等技术。首先说一下本博客的局限性&#xff1a; 总校区和分校区之间只是使用的传统的bgp建立连接&#xff0c;这样可以在运营商上看到内网的明细&…

HTTP1.1(七)内容协商和资源表述

一 内容协商和资源表述 ① 铺垫 1) 由于一种资源对应许多种状态,所以客户端接收资源表述的转移时需要进行协商比如&#xff1a;[1]、一个来自中国的用户他的浏览器访问一个页面时得到中文页面[2]、一个其它国家的用户访问同一个页面时得到的是他本国的页面补充&#xff1a;…

在线协作助力团队合作:解析多种高效工具实现团队协同

在线协作是通过网络为平台&#xff0c;将团队成员连接起来&#xff0c;使其共同创作、共享讯息&#xff0c;进行团队合作。这种协作方式突破了线下的空间限制性&#xff0c;使团队合作更加及时便捷。因此&#xff0c;越来越多的团队选择了在线协作。 在线协作为团队带来了什么帮…

IDEA 2019.1 与 apache-maven-3.6.3 版本不兼容解决办法

-------IDEA 2019.1 与 apache-maven-3.6.3 版本不兼容 解决办法&#xff1a;降低 Maven版本为 3.3 到底得踩过多少坑&#xff0c;才能让你不再流泪&#xff0c;

接初识HTML中的基础知识,简单明了!!!

续——HTML的基础知识&#xff01;&#xff01;&#xff01; 一、表格 关于HTML中用table表示一个表格&#xff0c;用tr来表示一行&#xff0c;用td来表示一列。 Demo&#xff1a;表示一个二行三列的表格 <!--根--> <html><!--头--> <head><…