每日一题】code-festival-2016-qualc C - Two Alpinists | 分类讨论 |简单

题目内容

原题链接

给定两个长度为 n n n 的数组 b b b 和 c c c ,下标从 0 0 0 开始
b i = max ⁡ ( a 0 , a 1 , ⋯   , a i ) b_i=\max(a_0,a_1,\cdots,a_i) bi=max(a0,a1,⋯,ai)
c i = max ⁡ ( a n − 1 , a n − 2 , ⋯   , a i ) c_i=\max(a_{n-1},a_{n-2},\cdots,a_i) ci=max(an−1,an−2,⋯,ai)

问可以构造出多少个不同的 a a a , a i a_i ai 是正整数。

答案对 1 0 9 + 7 10^9+7 109+7 取模。

数据范围

  • 1 ≤ n ≤ 1 0 5 1\leq n\leq 10^5 1≤n≤105
  • 1 ≤ b i ≤ 1 0 9 , b i ≤ b i + 1 1\leq b_i\leq 10^9,b_i\leq b_{i+1} 1≤bi≤109,bi≤bi+1
  • 1 ≤ c i ≤ 1 0 9 , c i ≥ c i + 1 1\leq c_i\leq 10^9,c_i\geq c_{i+1} 1≤ci≤109,ci≥ci+1

题解

考虑 b i > b i − 1 b_{i}> b_{i-1} bi>bi−1 ,则 a i = b i a_{i}=b_{i} ai=bi ,此时 c i ≥ b i c_i\geq b_i ci≥bi

考虑 c i > c i + 1 c_{i}> c_{i+1} ci>ci+1,则 a i = c i a_i=c_i ai=ci ,此时 b i ≥ c i b_i\geq c_i bi≥ci

这里我们还需要特判 b 0 ≤ c 0 b_0\leq c_0 b0≤c0 , b n − 1 ≥ c n − 1 b_{n-1}\geq c_{n-1} bn−1≥cn−1

如果 b i = b i − 1 b_i=b_{i-1} bi=bi−1 且 c i = c i + 1 c_i=c_{i+1} ci=ci+1 ,则 a i ∈ [ 1 , min ⁡ ( b i , c i ) ] a_i\in [1,\min(b_i,c_i)] ai∈[1,min(bi,ci)], a i a_i ai 共这么多种选择。

时间复杂度: O ( n ) O(n) O(n)

代码

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

const int MOD = 1e9 + 7;

int main()
{
    int n;
    cin >> n;

    vector<int> b(n), c(n);
    for (int i = 0; i < n; ++i) cin >> b[i];
    for (int i = 0; i < n; ++i) cin >> c[i];

    if (b.front() > c.front() || b.back() < c.back()) {
        cout << "0\n";
        return 0;
    }

    bool ok = true;
    int ans = 1;
    for (int i = 1; i + 1 < n; ++i) {
        if (b[i] > b[i - 1]) {
            if (c[i] < b[i]) {
                ok = false;
                break;
            }
        } else if (c[i] > c[i + 1]) {
            if (c[i] > b[i]) {
                ok = false;
                break;
            }
        } else {
            ans = 1ll * ans * min(b[i], c[i]) % MOD;
        }
    }

    if (ok) cout << ans << "\n";
    else cout << 0 << "\n";

    return 0;
}
相关推荐
汀、人工智能7 小时前
[特殊字符] 第21课:最长有效括号
数据结构·算法·数据库架构·图论·bfs·最长有效括号
Boop_wu7 小时前
[Java 算法] 字符串
linux·运维·服务器·数据结构·算法·leetcode
故事和你918 小时前
洛谷-算法1-2-排序2
开发语言·数据结构·c++·算法·动态规划·图论
Fcy6488 小时前
算法基础详解(三)前缀和与差分算法
算法·前缀和·差分
kvo7f2JTy8 小时前
基于机器学习算法的web入侵检测系统设计与实现
前端·算法·机器学习
List<String> error_P9 小时前
蓝桥杯最后几天冲刺:暴力大法(一)
算法·职场和发展·蓝桥杯
迈巴赫车主10 小时前
蓝桥杯3500阶乘求和java
java·开发语言·数据结构·职场和发展·蓝桥杯
流云鹤10 小时前
Codeforces Round 1090 (Div. 4)
c++·算法
wljy110 小时前
第十三届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组(个人见解,已完结)
c语言·c++·算法·蓝桥杯·stl
高一要励志成为佬10 小时前
【数据结构】算法复杂度
数据结构