zoukankan      html  css  js  c++  java
  • 2018 蓝桥杯省赛 B 组模拟赛(五)

    惨案

    理性分析>>盲目乱写

     

    递归求快速幂

     


    藏宝图

    题意

    蒜头君得到一张藏宝图。藏宝图是一个 10 imes 1010×10的方格地图,图上一共有 1010 个宝藏。有些方格地形太凶险,不能进入。

    整个图只有一个地方可以出入,即是入口也是出口。蒜头君是一个贪心的人,他规划要获得所有宝藏以后才从出口离开。

    藏宝图上从一个方格到相邻的上下左右的方格需要 11 天的时间,蒜头君从入口出发,找到所有宝藏以后,回到出口,最少需要多少天

    分析

    bfs只能算出一个点到另一个点的最短距离

    针对这个题,我们不知道宝藏的访问顺序是造成这个问题最大的麻烦

    解决这个问题,我们可以将宝藏的访问顺序进行全排列,然后bfs找出相邻点的距离,求和即可

    由于bfs找最短距离和全排列在一起,可以n^2预处理出所有的最短距离


    蒜头君下棋

    题意

     

    分析

    分情况暴力


    加分二叉树

    题意

     

    分析

     


    合并数字

    题意

    给出n个数的序列,每次选出最左边的相邻的差的绝对值为 11的两个数,只保留较小的数,删去较大的数,直到没有两个相邻的差的绝对值为 1 的数,问最多可以进行多少次这样的操作?

    分析

    由于每次删除一个数,考虑用栈维护这个过程即可

     时间复杂度:由于每个数最多遍历两次,所以  O(n)

    #include<bits/stdc++.h>
    #define ll long long
    #define pb push_back
    using namespace std;
    
    const int maxn = 1e5+7;
    
    stack<int>q;
    
    int a[maxn];
    int n;
    int maxx;
    
    int main()
    {
        scanf("%d", &n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d", &a[i]);
        }
        q.push(a[1]);
        for(int i=2;i<=n;i++)
        {
            if((!q.empty())&&abs(a[i]-q.top())==1)
            {
                maxx++;
                if(a[i]>q.top())
                {
                    continue;
                }
                else
                {
                    q.pop();
                    i--;
                }
            }
            else
            {
                q.push(a[i]);
            }
        }
        printf("%d",maxx);
        return 0;
    }
    View Code

    蒜头君的数轴

    题意

     

    分析

    两个线段可以整除的最大距离就是他们的gcd,预处理gcd,枚举不相同线段,去最优即可


     

  • 相关阅读:
    Effective C++ 1.让自己习惯C++
    C++Primer 第十九章
    C++Primer 第十八章
    C++Primer 第十七章
    C++Primer 第十六章
    C++Primer 第十五章
    C++Primer 第十四章
    ~~在python中踩过的坑以及问题~~(不断更新)
    ~~Python解释器安装教程及环境变量配置~~
    ~~Py2&Py3~~
  • 原文地址:https://www.cnblogs.com/Superwalker/p/8648443.html
Copyright © 2011-2022 走看看