2023牛客寒假算法基础集训营4

news2024/12/23 12:28:23

A-清楚姐姐学信息论

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

不同进制对于信息的表示效率不同,清楚姐姐最近学习了信息论中使用不同进制表示信息的方法,她现在想要比较两种不同进制表示信息时,谁的效率更高。

在不引入信息论的情况下,我们可以举一个生活中具体的例子来教大家如何比较进制的信息表示效率。

在临近考试冲刺,或者形如``距离啥啥只有“XX”天的时候,往往会准备一些数字号码牌用于表示这个“XX”天,假设现在有一个倒数100100100天的需求。我们往往会准备0,1,2,3,4,5,6,7,8,90,1,2,3,4,5,6,7,8,90,1,2,3,4,5,6,7,8,9共101010种号码牌,每种号码牌各222个,使用这202020个号码牌进行排列组合就可以表示000到999999这100100100天。

也就是说对于101010进制,使用202020个号码牌就可以表示100100100个不同的数字。

现在我们思考一下,假设这个“XX”我们不再用101010进制表示,而是改为222进制表示。同样使用202020个号码牌,能够表示多少个数字?

我们发现对于222进制,使用202020个号码牌可以表示102410241024个数字,远大于101010进制下使用相同多的号码牌能够表示的数字数目。

当且仅当,xxx进制和yyy进制分别使用x⋅yx \cdot yx⋅y张号码牌时xxx进制能够表示的数字数目大于yyy进制,则称xxx进制的信息表示效率大于yyy进制。

输入描述:

输入仅一行,两个非负整数x,y(2≤x,y≤109)x,y(2 \leq x,y \leq 10^{9})x,y(2≤x,y≤109)表示清楚姐姐想要比较xxx进制和yyy进制,哪种进制的信息表示效率更高。

输出描述:

输出仅一行,一个整数ansansans,表示效率更高的进制,特别的,如果输入两种进制的信息表示效率相同,则输出进制数较小的那一个,即当xxx进制和yyy进制的信息表示效率相同时,输出min(x,y)min(x,y)min(x,y)。

示例1

输入

复制2 10

2 10

输出

复制2

2

说明

使用202020个号码牌时,222进制能表示102410241024个数字,而101010进制只能表示100100100个数字,故222进制的信息表示效率高于101010进制

示例2

输入

复制998244354 998244353

998244354 998244353

输出

复制998244353

998244353

示例3

输入

复制1000000000 1000000000

1000000000 1000000000

输出

复制1000000000

1000000000

说明

输入的xxx和yyy可能相同

//我刚开始观察样例,直接cout<<min(x,y),显然错误,我们注意看第一个样例说明那里,当我们输入2,10时,2进制能表示1024个数字,而10进制能表示100个,其实也就2^10=1024,10^2==100,那么我们分别求出他们能表示的数字,然后比较,谁大输出谁,相同输出小的那个进制,然后相等那里举个例,2^4==4^2,所有输出2.

不过直接输出min(x,y),也不是不可,除2,3这对数比较特殊,特判一下,其他的都是小数的大数次方大于大数的小数次方,同时建议用这个方法,虽然我用了long long,但应该是测试点问题,按题目所述的话还是会超过这个范围,当然也可以转换成其他形式比较。

#include<bits/stdc++.h>
using namespace std;
int main(){
    int x,y;
    cin>>x>>y;
  long long a,b;
    a=pow(x,y);
    b=pow(y,x);
    if(a>b)cout<<x;
    else if(a==b)cout<<min(x,y);
    else cout<<y;
    return 0;
}

E-清楚姐姐打怪升级 

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

清楚姐姐玩游戏打怪升级,一共有NNN只怪物,第iii只怪物的生命值上限为hih_ihi​,生命恢复速度为viv_ivi​,清楚姐姐的攻击间隔为ttt,攻击力为aaa。

在每个时刻初,若怪物的生命值不满,则恢复viv_ivi​点生命值,但是不能超过生命值上限hih_ihi​。

在第1,1+t,1+2⋅t,1+3⋅t,...,1+k⋅t1,1+t,1+2\cdot t,1+3 \cdot t ,...,1+k \cdot t1,1+t,1+2⋅t,1+3⋅t,...,1+k⋅t个时刻末,清楚姐姐可以选择一只怪物造成aaa点伤害,若此时怪物的生命值小于等于000,则该怪物死亡。

清楚姐姐想要知道自己至少在第几个时刻末可以杀死所有怪物,或者清楚姐姐永远也无法杀死所有怪物则输出−1-1−1。

输入描述:

第一行输入三个整数N,t,a(1≤N≤105,1≤t≤106,0≤a≤106)N,t,a(1 \leq N \leq 10^{5},1\leq t \leq 10^{6},0 \leq a \leq 10^{6})N,t,a(1≤N≤105,1≤t≤106,0≤a≤106),分别表示怪物的数目,清楚姐姐的攻击间隔和攻击力。

接下来NNN行,每行输入两个整数hi,vi(1≤hi≤106,0≤vi≤106)h_i,v_i(1\leq h_i \leq 10^{6},0 \leq v_{i} \leq 10^{6})hi​,vi​(1≤hi​≤106,0≤vi​≤106),分别表示每只怪物的生命值上限和生命恢复速度。

输出描述:

仅一个整数,表示清楚姐姐至少在第几个时刻末可以杀死所有怪物,或者清楚姐姐永远也无法杀死所有怪物则输出−1-1−1。

示例1

输入

复制2 1 7 7 100 10 4

2 1 7
7 100
10 4

输出

复制3

3

说明

在第111个时刻末,清楚姐姐一刀解决第111只怪物。

在第222个时刻末,清楚姐姐攻击第222只怪物,怪物剩余血量为333。

在第333个时刻初,第222只怪物恢复444点生命,怪物剩余血量为777。

在第333个时刻末,清楚姐姐攻击第222只怪物,杀死所有怪物。

示例2

输入

复制2 100 7 3 100 10 4

2 100 7
3 100
10 4

输出

复制-1

-1

longlong一定要加,不能模拟,会超时,需要找规律。

我们每个时刻初进行攻击,并且加上时间,如果发现生命值小于等于0,那么继续下一个怪物,没死情况后,我们再判断他是不是杀不死(条件就是他的间隔时间和恢复值的乘积大于等于伤害,我们可以把间隔时间看作一次操作,如果每次操作的伤害都小于在这次操作中的恢复值那肯定杀不死,这里无需考虑在每个时刻初,若怪物的生命值不满,则恢复vi点生命值,但是不能超过生命值上限hi,因为这样的情况杀不死。

接着,我们这样理解,每次操作带来的伤害就是原本的伤害减去这次操作中这个时间段恢复的值的总量,也就是在这个时间间隔的里的这次操作中,产生的伤害就是a-t*v,我们只需要用现有的生命h去除以他,看看需要几次时间t,如果除不尽再加一次时间t,对于最后的输出,我的理解是因为从1时刻开始的,我们的x只是统计了这几次操作所需的时间t,然后-t,其实就是减去最开始1时刻与t间隔之间的差。

#include<bits/stdc++.h>
using namespace std;
int main(){
  long long int n,t,a,h,v,x=0,k=0;
    cin>>n>>t>>a;
    while(n--){
        cin>>h>>v;
       h-=a;x+=t;
        if(h<=0)continue;
        if(t*v>=a){k=1;break;}
        else {
            x+=(h/(a-t*v))*t;
            if(h%(a-t*v))
                x+=t;
        }
        
    }
    if(k==1)cout<<"-1";
    else
    cout<<x+1-t;
    return 0;
}

L-清楚姐姐的三角形I

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

众所周知,组成三角形的条件是三角形三条边满足任意两边之和大于第三边,任意两边之差小于第三边。

假设三角形的三条边分别为a,b,ca,b,ca,b,c长度分别为la,lb,lcl_a,l_b,l_cla​,lb​,lc​,且la,lb,lcl_a,l_b,l_cla​,lb​,lc​都是正整数

我们定义三角形的三个顶点分别为A,B,CA,B,CA,B,C,顶点AAA连接b,cb,cb,c两边;顶点BBB连接a,ca,ca,c两边;顶点CCC连接a,ba,ba,b两边。

定义三角形三个顶点的权值VA=lb+lc,VB=la+lc,VC=la+lbV_A=l_b+l_c,V_B=l_a+l_c,V_C=l_a+l_bVA​=lb​+lc​,VB​=la​+lc​,VC​=la​+lb​。

现在清楚姐姐已知VA,VB,VCV_A,V_B,V_CVA​,VB​,VC​的值,求la,lb,lcl_a,l_b,l_cla​,lb​,lc​的值。

输入描述:

第一行输入一个正整数T(1≤T≤105)T(1 \leq T \leq 10^5)T(1≤T≤105)表示测试案例的组数,对于每组测试案例:

输入三个正整数VA,VB,VC(1≤VA,VB,VC≤109)V_A,V_B,V_C(1\leq V_A,V_B,V_C \leq 10^{9})VA​,VB​,VC​(1≤VA​,VB​,VC​≤109)。

输出描述:

对于每组测试案例:

若存在至少一组正整数la,lb,lcl_a,l_b,l_cla​,lb​,lc​的值可以组成三角形,则首先输出'Yes',然后另起一行输出三个正整数表示la,lb,lcl_a,l_b,l_cla​,lb​,lc​的值,输出的顺序也要按照la,lb,lcl_a,l_b,l_cla​,lb​,lc​的顺序,输出的三个数之间用一个空格隔开,如果有多种解,你可以输出任意解。

否则对于该组测试案例只用输出一个字符串'No'。

裁判程序将忽略大小写,你可以输出任意大小写的'YES'和'NO'

示例1

输入

复制2 1 1 1 7 8 9

2
1 1 1
7 8 9

输出

复制No Yes 5 4 3

No
Yes
5 4 3

//这题是补题的,不过我没太明白,题目所说的如果有多解,输出任意解,我觉得解是唯一的。

提交成功后,自我总结关键点在于第一个判断,不仅需要保证任意两边之和大于第三边(我看有些还把任意两边之差小于第三边,加上了绝对值去判断,显然没有必要),还要保证求出的a,b,c能和x,y,z产生正确联系,因为我们是取整,而在计算中,会出现小数,题目中还把a,b,c是正整数进行了加粗。

#include<bits/stdc++.h>
using namespace std;
int main(){
   int t,x,y,z,a,b,c;
    cin>>t;
    while(t--){
        cin>>x>>y>>z;
        a=0,b=0,c=0;
        c=(x+y-z)/2;b=(x+z-y)/2;a=(y+z-x)/2;
        if((a+b)>c&&(a+c)>b&&(b+c)>a&&x==(b+c)&&y==(a+c)&&z==(a+b))
            cout<<"Yes\n"<<a<<' '<<b<<' '<<c<<endl;
        else cout<<"No\n";
    }
    return 0;
}

M-清楚姐姐的三角形II

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

清楚姐姐编写程序判断三条边可以组成三角形后,决定反其道而行之。

请你构造一个大小为NNN的数组,要求数组中每相邻的三项均不能组成三角形,即输出一个数组aaa,要求对于所有的ai,ai+1,ai+2a_{i},a_{i+1},a_{i+2}ai​,ai+1​,ai+2​不能组成三角形,并且你构造的数组中每一项的值在[1,109][1,10^9][1,109]范围内。

输入描述:

输入一个正整数N(1≤N≤105)N(1\leq N \leq 10^{5})N(1≤N≤105)表示数组的大小。

输出描述:

输出一行NNN个正整数aia_iai​表示数组的每个元素,要求aia_iai​的值在[1,109][1,10^9][1,109]范围内。

示例1

输入

复制10

10

输出

复制1 1 2 3 5 8 13 21 34 55

1 1 2 3 5 8 13 21 34 55

说明

1,1,2不能组成三角形。
1,2,3不能组成三角形。
2,3,5不能组成三角形。
3,5,8不能组成三角形。
5,8,13不能组成三角形。
8,13,21不能组成三角形。
13,21,34不能组成三角形。
21,34,55不能组成三角形。

 //这题有点小坑,题目就是让我们输出n个数字,每相邻三个数都不能构成三角形,也就是出现一边等于其他两边之和,我们以最小数1构成一个等边三角形,那就是1 1 1,如果使其不成立,令其一边为2即可,1 1 2,然后看着样例,第4个数字在1 2的前提是只能是3,也就是3=1+2,然后发现这不就是一个斐波那契数列嘛,从这里就入坑了,运行测试的时候,题目也说了可能有多个解。

 最后才注意到每个数的最大范围是10^9,但按斐波那契数列早就超过了,所以从最简单的1 1 2开始,然后1 1 2 1 1 2 1 1 2......以此继续下去输出前n个数即可,也满足每三个无法组成三角形,当然我们的初始循环也可以是1 2 1或2 1 1,输出任意一个都行。

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,i,a[100005],y=0;
    cin>>n;
    for(i=1;i<=n;i++)
        if(i%3==0)a[i]=2;
    else a[i]=1;
    for(i=1;i<=n;i++){
        if(i!=1)cout<<' ';
        cout<<a[i];
    }
        
    return 0;
}

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

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

相关文章

从软件角度看PCIe设备的硬件结构

从软件角度看PCIe设备的硬件结构 文章目录从软件角度看PCIe设备的硬件结构参考资料&#xff1a;一、 PCIe接口引脚二、 从软件角度理解硬件接口2.1 PCI/PCIe地址空间转换2.2 PCIe上怎么传输地址、数据三、 PCIe系统的硬件框图致谢参考资料&#xff1a; 《PCI Express Technolo…

ElasticSearch概念与架构原理

文章目录一、概述二、ElasticSearch架构原理三、ElasticSearch搜索入门一、概述 ElasticSearch简介 简介 ES是建立在Lucene基础之上的分布式准实时搜索引擎&#xff0c;它所提供的诸多功能中有一大优点&#xff0c;就是实时性好。比如&#xff1a;在业务需求中&#xff0c;新增…

计算机图形学 第7章 自由曲线曲面

先说好&#xff0c;第八章不学。 目录学习目标曲线与曲面的表示形式插值与逼近Bezier曲线定义一次Bezier曲线二次Bezier曲线⭐⭐⭐三次Bezier曲线⭐⭐⭐三次Bezier曲线的Bernstein基函数&#xff1a;Bernstein基函数的性质Bezier曲线的性质de Casteljau算法几何作图法绘制Bezie…

Struts2之拦截器

Struts2之拦截器1、Struts2体系架构1.1、执行流程1.2、核心接口和类1.3、流程简图2、Struts2拦截器2.1、使用拦截器的目的2.2、拦截器的简介2.3、拦截器的工作原理2.4、拦截器的使用2.4.1、创建自定义拦截器2.4.2、struts.xml中定义和配置拦截器2.4.3、Struts2默认拦截器2.4.4、…

Leetcode.2319 判断矩阵是否是一个 X 矩阵

题目链接 Leetcode.2319 判断矩阵是否是一个 X 矩阵 Rating : 1201 题目描述 如果一个正方形矩阵满足下述 全部 条件&#xff0c;则称之为一个 X矩阵 &#xff1a; 矩阵对角线上的所有元素都 不是 0 矩阵中所有其他元素都是 0 给你一个大小为 n x n的二维整数数组 grid&#…

ElasticSearch - 旅游酒店案例es功能实现

目录 案例 搜索与分页功能 条件过滤功能 附近的酒店功能 广告置顶功能 HotelService(es操作)总览 案例 搜索与分页功能 案例需求&#xff1a;实现旅游的酒店搜索功能&#xff0c;完成关键字搜索和分页实现步骤如下&#xff1a;1.定义实体类&#xff0c;接收前端请求实体…

微信小程序用vant自定义tabbar页面并跳转相应页面

0.前置安装 步骤一 安装 vant 组件库 npm i vant/weapp -S --production下载完后要npm构建才能使用 步骤二 修改 app.json 将 app.json 中的 "style": "v2" 去除&#xff0c;小程序的新版基础组件强行加上了许多样式&#xff0c;难以覆盖&#xff0c;不…

分布式定时任务框架选型

目录 1. 前言 2. 定时任务框架 3. 分布式任务调度系统对比 4. 和quartz框架对比 5. 综合对比 6. 总结和结论 7. 附定时任务的其他方案 1. 前言 我们先思考下面几个业务场景的解决方案: 支付系统每天凌晨1点跑批&#xff0c;进行一天清算&#xff0c;每月1号进行上个月清…

【算法】快速排序算法原理及实现

1.什么是快速排序算法 快速排序是对冒泡排序的一种改良版&#xff0c;通过一趟排序&#xff0c;把要排序的序列分割成两个部分&#xff0c;一部分的所有数据要比另一部分的数据都小&#xff0c;然后再根据这两部分的数据来进行快速排序。以此来达到整一个数据都变成了有序序列…

AI算法创新赛-人车目标检测竞赛总结01

AI0000020摘要:人车目标检测竞赛主要考察目标检测算法与 TPU 部署推理&#xff0c;主要考察算法选型与调 优&#xff0c;面向算能 TPU 迁移部署与推理加速两项能力;主要考核目标是算法效果(mAP)与推 理性能(单张图片推理时间)。针对这些要求&#xff0c;笔者从算法选型&#xf…

【实际开发11】- 统计 / 科学计算 - 1

目录 1. sql 统计返回值为 null 时 , 赋值 为 : 0 ( return UI ) 1. 手动 null 判断 , 进行 “0” 赋值 2. XxxxVO 展示对象 , 初始化时 , 赋值默认值 ( 待优化 ) 2. 统计异常 1. 注意中间表数据的维护 ( 同步删除 / 避免手动删数据 ) 3. 精度损失 1. Java 类型 float、…

.NET(C#、VB)APP开发——Smobiler平台控件介绍:LiveStream和LiveStreamPlayer

本文简述如何在Smobiler中使用LiveStream和LiveStreamPlayer。 LiveStream 直播推送插件 Step 1. 新建一个SmobilerForm窗体&#xff0c;并在窗体中加入LiveStream和Button&#xff0c;布局如下 选中LisvStream&#xff0c;在设计器中设置Url&#xff08;需要事先准备一个视频…

【面试原型链】前端面试那些事(1)之原型链详解

【写在前面】辞旧迎新的春季佳节&#xff0c;在这里博主先祝各位看官新的一年赚钱多多&#xff0c;知识满满&#xff0c;年后谈到面试&#xff0c; 好多人在面试的时候就倒在原型链知识点上面&#xff0c;主要原因还是基本功不够扎实&#xff0c;针对以前的知识我也计划在2023年…

C语言小题,通过指向结构体变量的指针变量输出结构体变量中成员的信息。(指针结构体变量的指针)

前言&#xff1a; 此篇是针对 指针结构体变量的指针 方面的练习。 解题思路&#xff1a; 在已有的基础上&#xff0c;本题要解决两个问题&#xff1a; &#xff08;1&#xff09;怎样对结构体变量成员赋值&#xff1b; &#xff08;2&#xff09;怎样通过指向结构体变量的指针…

天云数据:Hubble数据库系统自主研发率99.62%,是真正的信创数据库

软件是新一代信息技术的灵魂&#xff0c;是数字经济发展的基础&#xff0c;是制造强国、网络强国、数字中国建设的关键支撑。2021年&#xff0c;工信部印发的《“十四五”软件和信息技术服务业发展规划》明确指出&#xff0c;要聚力攻坚基础软件&#xff0c;关键基础软件补短板…

Javascript基础复盘5

内置对象 值属性 这些全局属性返回一个简单值&#xff0c;这些值没有自己的属性和方法。 InfinityNaNundefinedglobalThis函数属性 全局函数可以直接调用&#xff0c;不需要在调用时指定所属对象&#xff0c;执行结束后会将结果直接返回给调用者。 eval()uneval()isFinite()isN…

Q-Learning以及.NET环境下的实现

Q-Learning以及.NET环境下的实现写在前面机器学习Q-Learning环境准备试题准备解题过程写在结尾写在前面 看过我的文章的朋友应该都知道&#xff0c;我之前一直在研究视觉相关的知识&#xff0c;也看了一些卷积神经网络&#xff08;CNN&#xff09;&#xff0c;深度学习相关的文…

强化学习之:价值学习Value-Based Learning

文章目录参考内容动作价值函数&#xff08;Action-value Function&#xff09;深度强化学习&#xff08;DQN&#xff09;学习目标&#xff08;Goal&#xff09;如何获得尽可能好的 Q∗(st,a)→Q^{*}(s_t, a) \rightarrowQ∗(st​,a)→ 用神经网络通过学习获得时间差分算法&…

cocos creater 3.x 开发笔记(踩坑总结)

1、cocos creater 3.x 花屏闪屏黑屏 1.1 花屏 排序是一个很简单的功能&#xff0c;但是最终的呈现却是根据不同平台提供的渲染能力来的。因此&#xff0c;在这里说明一下&#xff0c;如果遇到了 UI 渲染出错&#xff0c;花屏&#xff0c;闪屏等现象&#xff0c;首先要检查的就…

【安装合集】Mysql8.0安装 2023年1月31日 22点15分

1.鼠标右击【Mysql8.0】压缩包选择【解压到Mysql8.0】。 2. 鼠标右击【mysql-installer-community-8.0.17.0】选择【安装】 3. 勾选【I accept the license terms】然后点击【Next】。 4. 选择【Custom】然后点击【Next】。 5. 双击【MySQL Servers】 双击【MySQL Server】&am…