• CF1366E Two Arrays(思维+数学)


    对于这道题,可以想想对于每个b[i],a[i]中可选的位置的区间在哪,这样只要找到区间,就能知道当前可以选那几个位置断开

    b[1]的开头肯定是1号位,而我们发现如果对后缀求一下后缀的最小值,这样就天然满足题目条件,我们用一个map存一下答案,就能知道b[i]是最小值的区间是哪些

    因为b是单调递增的数学因此可以从头枚举b[i]所在位置,用乘法原理进行计算。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=2e5+10;
    const int mod=998244353;
    int a[N];
    int b[N];
    int suffix[N];
    map<int,int> cnt;
    int main(){
        ios::sync_with_stdio(false);
        int n,m;
        cin>>n>>m;
        int i;
        for(i=1;i<=n;i++)
            cin>>a[i];
        for(i=1;i<=m;i++)
            cin>>b[i];
        suffix[n+1]=0x3f3f3f3f;
        for(i=n;i>=1;i--){
            suffix[i]=min(suffix[i+1],a[i]);
            cnt[suffix[i]]++;
        }
        ll ans=1;
        if(suffix[1]!=b[1]){
            cout<<0<<endl;
        }
        else{
            for(i=2;i<=m;i++){
                ans=ans*cnt[b[i]]%mod;
            }
            cout<<ans<<endl;
        }
        return 0;
    }
    View Code
    没有人不辛苦,只有人不喊疼
  • 相关阅读:
    17.正则表达式
    16.os模块-shutil模块-tarfile压缩模块
    15.序列化模块-时间模块-zip压缩模块
    第一章 单变量线性回归
    如何跑通MonoRTM模型的官方例子
    PHP命名规范
    js中要声明变量吗?
    php抓取网站图片源码
    InnoDB和MyISAM区别总结
    php分页代码。
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/13358133.html
Copyright © 2020-2023  润新知