题解:P11004 [蓝桥杯 2024 省 Python B] 魔法巡游

题目传送门

虽然是 python 题,但我还是用 C++ 做了。

题目大意

这道题的代码其实很简单,只是难在读题。

给出两个长度为 n n n 的数组 s s s t t t。从中拿出一些元素组成序列 s i 1 , t i 2 , s i 3 , t i 4 , ⋯ s_{i_1},t_{i_2},s_{i_3},t_{i_4},\cdots si1,ti2,si3,ti4,,使得 i 1 < i 2 < i 3 < i 4 < ⋯ i_1<i_2<i_3<i_4<\cdots i1<i2<i3<i4<,且序列中所有元素的值包含 0 , 2 , 4 0,2,4 0,2,4,注意,相邻的元素间不需包含相同的共鸣元素,有共鸣元素即可。求该序列最长是多少。

思路讲解

因为我们要交替着从两数组中取走元素,所以设一个变量 w w w,表示我们现在要取哪一个数组的元素。

枚举 1 ∼ n 1 \sim n 1n,因为我们要答案最大,所以如果我们取的那个数组该位置的值包含共鸣元素 0 , 2 , 4 0,2,4 0,2,4,则将答案加 1 1 1,并将 w w w 设为另一个数组,继续寻找答案。

代码实现

#include <bits/stdc++.h>
using namespace std;
int n,s[100005][2],ans=0;//二维数组更加方便查找
bool check(int x){//判断是否包含共鸣元素
    while(x){
        if(x%10==0 || x%10==2 || x%10==4)
            return true;
        x/=10;
    }
    return false;
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>s[i][0];
    for(int i=1;i<=n;i++)
        cin>>s[i][1];
    int w=0;//将w设为0,因为要先找第一个数组
    for(int i=1;i<=n;i++)
        if(check(s[i][w]))
            ans++,w=(w+1)%2;//如果有共鸣元素,将答案加1,并将w设为另一个数组。
    cout<<ans;
    return 0;
}

完结撒花!

蓝桥杯是一个国内著名的计算机比赛,为了帮助参赛者更好地准备和了解比赛的题型,组委会会公布历年的真题并提供相应的题解。 首先,我们需要了解蓝桥杯是一个综合性的计算机比赛,测试的对象包括计算机基础知识、编程能力以及解决实际问题的能力。 在历年的真题中,参赛者将面临不同类型的题目,包括算法设计与优化问题、数据结构与算法问题、编程题等。其中针对Python B组的题目主要考察的是对Python语言的掌握和应用能力。 题目解答一般会包含以下几个方面的内容: 1. 题目分析与理解:读取题目,理解题目的要求和限制条件。通过仔细分析题目,确定题目的输入与输出,以及问题的核心。 2. 设计解决方案:根据题目要求和限制条件,设计一个合适的解决方案。可以使用合适的算法和数据结构来解决问题,并做出相应的性能优化。 3. 编写代码实现:根据设计的方案编写相应的代码实现。需要注意的是,Python语言有其独特的语法和特性,掌握好这些特性可以更好地完成编程任务。 4. 调试与测试:编写完代码后,需要进行调试和测试。通过运行样例输入和输出,检查代码是否符合题目要求,并且没有逻辑上的错误。 5. 总结与优化:在完成题目解答后,可以进行总结和优化。包括分析算法复杂度、代码风格和可读性等方面,以便在比赛中更好地表现。 在准备蓝桥杯时,可以通过阅读历年的真题和题解来了解比赛的难度和类型,针对性地进行练习和提高。同时也可以参加相关的培训班和讨论活动,与其他参赛者交流经验和技巧。 总而言之,历年蓝桥杯真题的解答对于提高自己的编程能力和应对比赛非常有帮助。通过认真分析和实践,可以更好地理解并掌握Python编程,并在比赛中取得更好的成绩。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值