2024牛客寒假算法基础集训营3部分题解

智乃与瞩目狸猫、幸运水母、月宫龙虾

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


来源:牛客网
 

Ubuntu是一个以桌面应用为主的Linux发行版操作系统,其名称来自非洲南部祖鲁语或豪萨语的"ubuntu"一词,意思是"人性"、"我的存在是因为大家的存在",是非洲传统的一种价值观。
 

在ubuntu系统下,命令行执行

lsb_release -a

可以看到代号(Codename),到目前为止,Ubuntu 发行版的每个代号都包含一个形容词和一个动物。例如:瞩目狸猫(Focal Fossa)、幸运水母(Jammy Jellyfish)、月宫龙虾(Lunar Lobster),每个代号的两个单词首字母相同。

在不考虑单词词性的前提下,只要求两个单词的首字母忽略大小写相同时就认为它们可能是一组ubuntu代号,请你编写程序判断给定的两个单词是否可能是一个ubuntu代号。

输入描述:

第一行输入一个正整数T(1≤T≤105)T(1\leq T \leq 10^{5})T(1≤T≤105),表示测试用例的组数。对于每组测试用例,输入一行两个单词S,T(1≤∣S∣,∣T∣≤50)S,T(1 \leq |S|,|T|\leq 50)S,T(1≤∣S∣,∣T∣≤50),单词仅包含大小写英文字母。

输出描述:

对于每组测试用例,如果它可能是一组ubuntu代号,则输出"Yes",否则输出"No"。裁判程序将忽略大小写,你可以输出任意大小写的"Yes"和"No"。

示例1

输入

复制1 jammy jellyfish

1
jammy jellyfish

输出

复制Yes

Yes

示例2

输入

复制13 Artful Aardvark Bionic Beaver Cosmic Cuttlefish Disco Dingo Eoan Ermine Focal Fossa Groovy Gorilla Hirsute Hippo Impish Indri Jammy Jellyfish Kinetic Kudu Lunar Lobster Avada Kedavra

13
Artful Aardvark
Bionic Beaver
Cosmic Cuttlefish
Disco Dingo
Eoan Ermine
Focal Fossa
Groovy Gorilla
Hirsute Hippo
Impish Indri
Jammy Jellyfish
Kinetic Kudu
Lunar Lobster
Avada Kedavra

输出

复制Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes No

Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
#include<bits/stdc++.h>
using namespace std;
int main(){int t;string s1,s2;cin>>t;getchar();while(t--){cin>>s1>>s2;if(s1[0]==s2[0]||s1[0]-32==s2[0]||s1[0]+32==s2[0])cout<<"Yes\n";else cout<<"No\n";}return 0;
}

 智乃的数字手串

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

智乃有一个数字手串,数字手串上有NNN个数字,第NNN个数字与第111个数字相邻。智乃决定和清楚姐姐玩一个游戏。

两个人轮流从数字手串上进行取数和交换的操作,当且仅当某两个相邻数字的和为偶数时,可以拿走这两个相邻数字中的任意一个,取数后将剩下的数字按照它们之前的相对顺序重新紧凑排列并选择两个数字交换他们的值,例如一开始的数字环为[1,3,2,5,4,7][1,3,2,5,4,7][1,3,2,5,4,7],取走数字333后,数字手串变为[1,2,5,4,7][1,2,5,4,7][1,2,5,4,7],接下来还可以选择两个数字交换他们的值,例如交换111和222变为[2,1,5,4,7][2,1,5,4,7][2,1,5,4,7]。(玩家在交换这个环节也可以选择跳过不进行任何交换操作)。

若数字手串的尺寸为111,则玩家可以直接取走最后一个数字并获得游戏的胜利。

若玩家不能进行取数操作,则该玩家失败输掉游戏。

现在清楚姐姐先手取数,若两个人都采取最优策略,谁将获胜?

输入描述:

第一行输入一个正整数T(1≤T≤104)T(1\leq T \leq 10^{4})T(1≤T≤104)表示测试用例的组数接下来对于每组测试用例,首行输入一个正整数N(1≤N≤26)N(1\leq N \leq 26)N(1≤N≤26)表示数字手串一开始的尺寸。接下来一行输入NNN个整数ai(0≤ai≤109)a_i(0\leq a_i \leq 10^{9})ai​(0≤ai​≤109)表示数字的值。

输出描述:

如果两人都采取最优策略,在清楚姐姐先手的情况下清楚姐姐获胜,请输出"qcjj",否则输出"zn"。

示例1

输入

复制1 5 1 1 2 2 2

1
5
1 1 2 2 2

输出

复制qcjj

qcjj

说明

清楚姐姐先手取走一个数字222,此时数字环变为[1,1,2,2][1,1,2,2][1,1,2,2],接下来清楚姐姐交换一个111和一个222,数字环变为[1,2,1,2][1,2,1,2][1,2,1,2]。智乃无法取数而输掉游戏。

示例2

输入

复制2 2 1 1 2 1000000000 1000000000

2
2
1 1
2
1000000000 1000000000

输出

复制zn zn

zn
zn

说明

注意当只剩下一个珠子时,可以直接取下,由于对手无珠子可取从而获得胜利。

//这题想复杂了

#include<bits/stdc++.h>
using namespace std;
int main(){int t,n,x;cin>>t;while(t--){cin>>n;for(int i=0;i<n;i++)cin>>x;if(n%2==1)cout<<"qcjj\n";else cout<<"zn\n";}return 0;                                                                                                                                                                                                                                                                             
}

 chino's bubble sort and maximum subarray sum(easy version)

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

智乃最近学习了冒泡排序和最长子段和,所以她现在想把它们合并成一个新的算法。


众所周知,冒泡排序是一种通过交换相邻元素实现排序的算法,最长子段和是指从一个数组aaa中取出一段连续的非空数组区间[l,r][l,r][l,r],最大化数组区间的和∑i=lrai\sum_{i=l}^{r}a_{i}∑i=lr​ai​。

现在智乃有一个长度大小为NNN的数组,数组中元素的值有正有负。她想要先进行恰好KKK次相邻元素的交换操作,再求整个数组的最大子段和。她想要让最后求出的最大子段和尽可能的大,请你帮助智乃算出她最终可能的最大子段和有多大。
 

输入描述:

第一行输入两个正整数N,K(2≤N≤103,0≤K≤1)N,K(2\leq N \leq 10^3,0 \leq K \leq 1)N,K(2≤N≤103,0≤K≤1)表示数组的长度,交换的次数。接下来一行NNN个整数,输入数组元素ai(−109≤ai≤109)a_i(-10^{9} \leq a_{i} \leq 10^{9})ai​(−109≤ai​≤109)表示数组元素的值。

输出描述:

仅一行一个整数,表示交换后能取到的非空最大子段和是多少。

示例1

输入

复制5 0 -1000000000 -1000000000 -1000000000 -1000000000 -1000000000

5 0
-1000000000 -1000000000 -1000000000 -1000000000 -1000000000

输出

复制-1000000000

-1000000000

说明

注意“非空”

示例2

输入

复制5 1 5 4 -100 2 3

5 1
5 4 -100 2 3

输出

复制11

11

说明

交换"-100"和 "2"

备注:

注意已经通过一次的题目不再次计算罚时,你可以活用这一规则减少自己的罚时次数。

//冒泡排序+最大子段和,因为k为0或1,当k为0的时候,就是简单的求最大子段和;当k为1的时候,不是说进行一次冒泡排序的结果,而是进行一次相邻位置的数交换,为了得到最大子段和的最佳结果,就要比较n-1次交换后的结果。

#include<bits/stdc++.h>
using namespace std;
long long n,k,i,j,z,a[1005],y=-1e9;//long long定义,y取最小值
void solve(){for(z=1;z<=n;z++){//注意全局变量和局部变量,之前这里使用i一直不对long long x=0;for(j=z;j<=n;j++){x+=a[j];y=max(y,x); }}
}
//最大子段和就是求n个数的组成的集合的子集和,
比如,这里有1,2,3三个数,可以组成1,2,3,1+2,2+3,1+3,1+2+3;
去比较上面6个子集和的最大值
int main(){cin>>n>>k;for(i=1;i<=n;i++)cin>>a[i];solve();if(k){for(i=1;i<n;i++){swap(a[i],a[i+1]);solve();swap(a[i],a[i+1]);//交换完成并求取子段和后初始化}}cout<<y;return 0;
}

 智乃的比较函数(easy version)

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

在c++标准库中,存在一个叫做std::sort的函数,它可以默认按照升序的方式排序,或者按照一种给定的自定义方式排序。


新手在使用自定义比较函数进行sort时,经常会因为没有遵守sort传入比较函数的约定而导致代码崩溃。

具体来讲,使用sort时需要定义一个比较函数cmp(x,y)cmp(x,y)cmp(x,y)他表示比较在排序的过程中xxx的顺序是否严格小于yyy的顺序,如果xxx的顺序严格小于yyy的顺序,则cmp(x,y)=1cmp(x,y)=1cmp(x,y)=1,反之cmp(x,y)=0cmp(x,y)=0cmp(x,y)=0。

新手在编写cmpcmpcmp函数时的一个易错点是在xxx和yyy的值相等时令cmp(x,y)=1cmp(x,y)=1cmp(x,y)=1,例如降序排序时将x>yx>yx>y写成了x≥yx \geq yx≥y。
 

抛开c++语言的底层实现,这样其实已经产生了逻辑矛盾。因为当xxx和yyy的值相等时cmp(x,y)=cmp(y,x)=1cmp(x,y)=cmp(y,x)=1cmp(x,y)=cmp(y,x)=1,在调用约定中,它表示在排序中xxx的顺序严格小于yyy且yyy的顺序严格小于xxx,显然这里产生了逻辑矛盾。所以此时无论c++库函数执行出任何的结果都是可能的,一般来讲这将导致运行错误。

所以在编写cmp(x,y)cmp(x,y)cmp(x,y)时,一定要注意,当xxx和yyy的值相等时,应该令cmp(x,y)=cmp(y,x)=0cmp(x,y)=cmp(y,x)=0cmp(x,y)=cmp(y,x)=0,这表示通知排序函数,不能确定在排序中xxx的顺序严格小于yyy,同时也不能确定yyy的顺序严格小于xxx,当然,从逻辑上讲,这只有一种情况,就是x=yx=yx=y,并未产生任何逻辑矛盾。


现在有三个整形变量a1,a2,a3a_{1},a_{2},a_{3}a1​,a2​,a3​(你可以认为这三个变量的值是int范围内任意的整数),告诉你NNN组cmp(ax,ay)cmp(a_x,a_y)cmp(ax​,ay​)的值,问是否产生了逻辑矛盾。

输入描述:

第一行输入一个正整数T(1≤T≤2×104)T(1\leq T \leq 2\times 10^{4})T(1≤T≤2×104)表示测试用例的组数。对于每组测试用例,第一行输入一个正整数N(1≤N≤2)N(1\leq N \leq 2)N(1≤N≤2)表示约束条件的数目,接下来NNN行,每行输入三个整数x,y,z(x,y∈{1,2,3},z∈0,1)x,y,z(x,y\in \{1,2,3\},z\in {0,1})x,y,z(x,y∈{1,2,3},z∈0,1)表示第iii个约束关系为cmp(ax,ay)=zcmp(a_x,a_y)=zcmp(ax​,ay​)=z。

输出描述:

对于每组测试用例,若没有矛盾,则输出"Yes",否则输出"No",你可以输出任意大小写的"Yes"和"No"。

示例1

输入

复制1 2 1 2 1 2 1 1

1
2
1 2 1
2 1 1

输出

复制No

No

说明

两个变量a1<a2a_{1}<a_{2}a1​<a2​成立且a2<a1a_{2}<a_{1}a2​<a1​成立,矛盾

示例2

输入

复制1 2 1 2 1 1 2 1

1
2
1 2 1
1 2 1

输出

复制Yes

Yes

说明

注意输入的约束可能会重复,并不要求输入的约束条件能够完全将三者排序,仅要求不产生矛盾就输出"Yes"。

示例3

输入

复制3 1 1 1 0 1 1 1 1 2 1 2 0 1 2 1

3
1
1 1 0
1
1 1 1
2
1 2 0
1 2 1

输出

复制Yes No No

Yes
No
No

说明

注意输入的xxx和yyy可以相等

//这题是逻辑思维题,重点在于找矛盾

#include<bits/stdc++.h>
using namespace std;
int main(){int t,n,x,y,z,a,b,c;cin>>t;while(t--){cin>>n;if(n==1){cin>>x>>y>>z;if(x==y&&z==1)cout<<"No\n";//题目给的矛盾else cout<<"Yes\n";}else{cin>>x>>y>>z;cin>>a>>b>>c;if((x==y&&z==1)||(a==b&&c==1))cout<<"No\n";//题目给的矛盾else if(a==x&&b==y&&z!=c)cout<<"No\n";//自身逻辑矛盾else if(a==y&&b==x&&c==z&&c==1)cout<<"No\n";//题目给的矛盾else cout<<"Yes\n";}}return 0;
}

智乃的36倍数(easy version)

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

本题有对应的normal version,区别仅在数据范围,保证easy version的测试用例集是normal version的真子集,通过困难版本的代码可直接通过简单版本。

智乃定义了一种运算fff,它表示将两个正整数按照字面值从左到右拼接。例如f(1,1)=11f(1,1)=11f(1,1)=11,f(114,514)=114514f(114,514)=114514f(114,514)=114514。

现在智乃有一个大小为NNN的正整数数组aaa,第iii个元素为aia_{i}ai​,现在他从中想选出两个正整数进行前后拼接,使得它们拼接后是一个363636的倍数,问智乃有多少种可行的方案。

具体来讲,她想要知道有多少对有序数对i,j(i≠j)i,j(i\neq j)i,j(i​=j)满足f(ai,aj)f(a_{i},a_{j})f(ai​,aj​)是一个363636的倍数。

输入描述:

第一行输入一个正整数N(1≤N≤1000)N(1\leq N \leq 1000)N(1≤N≤1000)数组的大小接下来输入一行NNN个正整数ai(1≤ai≤10)a_{i}(1\leq a_{i}\leq 10)ai​(1≤ai​≤10),表示aia_{i}ai​的值。

输出描述:

输出一个非负整数,表示有多少对有序数对i,j(i≠j)i,j(i\neq j)i,j(i​=j)满足f(ai,aj)f(a_{i},a_{j})f(ai​,aj​)是一个363636的倍数。

示例1

输入

复制7 1 2 3 4 5 6 7

7
1 2 3 4 5 6 7

输出

复制2

2

说明

分别为f(3,6)=36f(3,6)=36f(3,6)=36和f(7,2)=72f(7,2)=72f(7,2)=72

示例2

输入

复制4 3 3 3 6

4
3 3 3 6

输出

复制3

3

说明

f(1,4)=f(2,4)=f(3,4)=36f(1,4)=f(2,4)=f(3,4)=36f(1,4)=f(2,4)=f(3,4)=36

示例3

输入

复制1 10

1
10

输出

复制0

0

说明

注意当NNN为1时,凑不出一对。
#include<bits/stdc++.h>
using namespace std;
int main(){int n,i,a[10005],j,x=0;cin>>n;for(i=0;i<n;i++)cin>>a[i];sort(a,a+n);for(i=0;i<n;i++){for(j=n-1;j>=0;j--){int y=a[i]*10+a[j];if(i!=j&&y%36==0)x++;}}cout<<x;return 0;
}

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

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

相关文章

无心剑汉英双语诗《龙年大吉》

七绝龙年大吉 Great Luck in the Dragon Year 龙腾五岳九州圆 年吼佳音万里传 大漠苍鹰华夏梦 吉人天相铸奇缘 Dragon flies over five peaks watching the divine land so great and round, New Year’s call sends joyous tidal waves far across the world’s bound. The…

[office] 怎么在Excel2003菜单栏自定义一个选项卡 #其他#微信#知识分享

怎么在Excel2003菜单栏自定义一个选项卡 怎么在Excel2003菜单栏自定义一个选项卡 ①启动Excel2003&#xff0c;单击菜单栏--工具--自定义。 ②在自定义界面&#xff0c;我们单击命令标签&#xff0c;在类别中选择新菜单&#xff0c;鼠标左键按住新菜单&#xff0c;拖放到菜单栏…

SpringCloud-高级篇(十九)

我们已经学过使用 SpringAMQP去收和发消息&#xff0c;但是发和收消息是只是MQ最基本的功能了&#xff0c;在收发消息的过程中&#xff0c;会有很多的问题需要去解决&#xff0c;下面需要学习rabbitMQ的高级特性去解决 死信交换机&#xff1a;这个可以帮助我们实现消息的延迟的…

Git远程仓库的使用(Gitee)及相关指令

目录 1 远程仓库的创建和配置 1.1 创建远程仓库 1.2 设置SSH公钥 2 指令 2.1 git remote add 远端名称(一般为origin) 仓库路径 2.2 git remote 2.3 git push [-f] [--set-upstream] [远端名称 [本地分支名][:远端分支名]] 2.3 git clone url 2.4 git fetch 2.5 git p…

HCIA--NAT实验

1. 划分网段&#xff0c;配置接口IP地址&#xff0c;内网启用OSPF协议&#xff0c;并配置一对一的NAT&#xff1a; AR1配置&#xff1a; [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 10.1.1.1 24 [Huawei-GigabitEthernet0/0/0]int g0/0/1 [Huawei-GigabitEther…

【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏16(附项目源码)

本节最终效果演示 【独游开发记录】一个人开发的&#xff0c;类森林&#xff0c;七日杀生存游戏 文章目录 本节最终效果演示系列目录前言泛型单例添加声音脚步声鸭子动物音效人物各种操作音效砍树音效 效果源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列&#x…

[经验] 喉咙沙哑的原因及应对方法是什么 #学习方法#其他#媒体

喉咙沙哑的原因及应对方法是什么 生活中&#xff0c;喉咙不舒服是很常见的情况&#xff0c;尤其是喉咙沙哑&#xff0c;让人感到特别难受&#xff0c;影响睡眠和生活质量。那么喉咙沙哑怎么办呢&#xff1f;接下来我会分享一些简单易行的方法&#xff0c;帮助你缓解这种不适感…

政安晨:示例演绎机器学习中(深度学习)神经网络的数学基础——快速理解核心概念(一){两篇文章讲清楚}

进入人工智能领域免不了与算法打交道&#xff0c;算法依托数学基础&#xff0c;很多小伙伴可能新生畏惧&#xff0c;不用怕&#xff0c;算法没那么难&#xff0c;也没那么玄乎&#xff0c;未来人工智能时代说不得人人都要了解算法、应用算法。 本文试图以一篇文章&#xff0c;…

《CSS 简易速速上手小册》第2章:CSS 布局与定位(2024 最新版)

文章目录 2.1 Flexbox&#xff1a;灵活的布局解决方案2.1.1 基础知识2.1.2 重点案例&#xff1a;创建一个响应式导航菜单2.1.3 拓展案例 1&#xff1a;卡片布局2.1.4 拓展案例 2&#xff1a;中心对齐的登录表单 2.2 Grid 布局&#xff1a;网格系统的魔力2.2.1 基础知识2.2.2 重…

数字孪生:构建未来智慧社区的关键技术

随着科技的快速发展&#xff0c;数字孪生技术作为构建未来智慧社区的关键技术&#xff0c;正逐渐受到广泛关注。数字孪生技术能够实现物理世界与数字世界的交互映射&#xff0c;为智慧社区的建设提供强有力的支持。本文将探讨数字孪生技术在构建未来智慧社区中的作用和意义&…

枚举(Java)

一、概念 枚举是一种特殊的类。 格式&#xff1a; 修饰符 enum 枚举类名{ 对象名称1&#xff0c;对象名称2&#xff0c;....; 其他成员... } 二、枚举类的特点 1.枚举类的第一行只能罗列一些名称&#xff0c;并且这些名称都是常量&#xff0c;每个常量记住一个枚举类对象…

vue3 之 Pinia数据持久化

持久化用户数据说明 1️⃣用户数据中有一个关键的数据叫做token&#xff08;用来标识当前用户是否登陆&#xff09;&#xff0c;而token持续一段时间才会过期 2️⃣Pinia的存储是基于内存&#xff0c;刷新就丢失&#xff0c;为了保持登陆状态就要做到刷新不丢失&#xff0c;需要…

【芯片设计- RTL 数字逻辑设计入门 番外篇 9 -- SOC 中PL端与PS端详细介绍】

文章目录 Programmable Logic and Processing SystemPL&#xff08;Programmable Logic&#xff09;特点PS和PL之间的协同设计和开发工具 Programmable Logic and Processing System 在系统级芯片&#xff08;SoC&#xff09;的上下文中&#xff0c;“PL” 通常指的是可编程逻…

Qt可视化大屏布局

科技大屏现在非常流行&#xff0c;这里分享一下某个项目的大屏布局&#xff08;忘了源码是哪个博主的了&#xff09; 展示 这个界面整体是垂直布局&#xff0c;分为两个部分&#xff0c;标题是一个部分&#xff0c;然后下面的整体是一个layout布局&#xff0c;为另外一部分。 l…

学习Android的第五天

目录 Android ConstraintLayout 约束布局 简介 ConstraintLayout 约束布局分类 1、相对定位 (Relative positioning) 2、边距 ( Margins ) 3、居中定位和偏向 ( Centering positioning and bias ) 4、环形定位 ( Circular positioning ) 5、对可见性的处理 ( Visibilit…

利用知识图谱构建医疗问答

1、准备数据集 数据集下载地址&#xff1a;https://github.com/wangle1218/QASystemOnMedicalKG/blob/master/data/medical.json 2、导入相关包 from py2neo import Graph,Node,Relationship # 在cmd中&#xff0c;输入neo4j.bat console并回车 import pandas as pd3、连接N…

Rust基础拾遗--核心功能

Rust基础拾遗 前言1.所有权与移动1.1 所有权 2.引用3.特型与泛型4.实用工具特型5.闭包 前言 通过Rust程序设计-第二版笔记的形式对Rust相关重点知识进行汇总&#xff0c;读者通读此系列文章就可以轻松的把该语言基础捡起来。 1.所有权与移动 谈及内存管理&#xff0c;我们希望…

力扣hot100 -- 双指针

目录 &#x1f382;移动零 &#x1f319;盛最多水的容器 &#x1f33c;三数之和 &#x1f33c;接雨水 前缀和 辅助数组 双指针 单调栈 &#x1f382;移动零 283. 移动零 - 力扣&#xff08;LeetCode&#xff09; 关于swap #include <iostream> #include <vec…

[SAP] ABAP设置非系统关键字代码提示功能

在事务码SE38(ABAP编辑器)屏幕右下角&#xff0c;点击【Options选项】图标 勾选【代码完成】|【建议文本中的非关键字】&#xff0c;并点击【保存】按钮 在下面的程序代码中&#xff0c;当我需要输入在11行的位置输入非关键字lv_str的时候&#xff0c;会有非关键字代码提示的功…

STM32 cubemx配置DMA+空闲中断接收不定长数据

文章目录 前言一、串口空闲中断二、DMA空闲中断接收不定长数据实现思路三、STM32Cubemx配置DMA空闲中断接收不定长数据四、代码编写总结 前言 本篇文章给大家讲解一下DMA串口空闲中断接收串口不定长数据&#xff0c;之前我们也是讲解过串口接收不定长数据的&#xff0c;那么本…