题解: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;
}

完结撒花!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值