首页 > 其他分享 >牛客--64--F

牛客--64--F

时间:2022-12-30 22:14:16浏览次数:32  
标签:ch -- back 牛客 int 64 read push

关键

这个题目很值得学习呀!
看着是不能记录所有的状态,但是可以映射一下,然后就是直接线性dp了

代码

#include <bits/stdc++.h>
using namespace std;
const int M=2e6+5;
const int mod=998244353;
using pii=pair<int,int>;

inline int read(){
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
    return x*f;
}

void add(int &x,int y) {
    x=(x+y)%mod;
}

bool g[M][4];
int f[M][4];
unordered_map<int,int>mp;
vector<int>v;
vector<pii>node;

int main() {
    int n=read(),m=read();
    while(m--) {
        int x=read(),y=read();
        v.push_back(y);
        v.push_back(y+1);
        v.push_back(min(n,y+2));
        node.push_back({x,y});
    }
    v.push_back(1);
    v.push_back(n);
    sort(v.begin(),v.end());
    int len=v.erase(unique(v.begin(),v.end()),v.end())-v.begin();
    for(int i=0;i<len;i++)mp[v[i]]=i+1;
    for(auto [x,y]:node)g[mp[y]][x]=1;
    f[1][1]=1;
    //for(auto [x,y]:mp)cout<<x<<' '<<y<<endl;
    for(int i=1;i<len;i++) {
        for(int j=1;j<=3;j++) {
            if(g[i][j]) {
                //cout<<i<<' '<<j<<endl;
                add(f[min(i+2,len)][j],f[i][j]);
                add(f[i+1][max(1,j-1)],f[i][j]);
                add(f[i+1][min(3,j+1)],f[i][j]);
            }
            else add(f[i+1][j],f[i][j]);
        }
        //cout<<f[i][1]<<' '<<f[i][2]<<' '<<f[i][3]<<endl;
    }
    for(int i=1;i<=3;i++)cout<<f[len][i]<<'\n';
    return 0;
}

标签:ch,--,back,牛客,int,64,read,push
From: https://www.cnblogs.com/basicecho/p/17015899.html

相关文章

  • sublime编译系统
    杂项sublime编译系统一\(~~\)c++编辑环境新建编译系统”编译-编译系统-新建编译系统“新建一个编译系统,命名为“C++.sublime-build”,删除所有代码后复制为:{"cmd"......
  • win11 运行安卓程序 详细步骤
    Android子系统的要求确保Windows11版本为22000.xxx或更高版本。硬件必须支持并启用BIOS/UEFI虚拟化确保微软商店版本为22110.1402.6.0或更高版本,并单击“获取更新”按......
  • 差分好题
    Atcoder[ABC221D]Onlinegames难度:\(832\)标签:差分离散化\(\mathtt{blog}\)......
  • 离散化好题
    Atcoder[ABC221D]Onlinegames难度:\(832\)标签:差分离散化\(\mathtt{blog}\)......
  • c/c++开发分享使用NlohmannJson写JSON保留插入顺序
    1.正文nlohmann/json是一个c++的读写json的组件,号称使用现代c++范式写的。简单看了一下,这个组件确实包含了很多cpp11以上的特性,在vs2015及一下的版本甚至没办法正常编译......
  • 【C++ JSON 开源库】nlohmann入门使用总结
    一、前言以前更多使用Qt5专门的QJsonDocument及其相关类来读写JSON文档,但用久了发现比较麻烦,不够简洁美观,所以更换使用nlohmann。nlohmann 是一个用于解析JSON......
  • c++中nlohmann json的基本使用教程
    nlohmann/json 是一个C++实现的JSON解析器,使用非常方便直观,下面这篇文章主要给大家介绍了关于c++中nlohmann json基本使用的相关资料,文中通过实例代码介绍的非常详细,......
  • 刷刷刷Day3| 203.移除链表元素 ,707.设计链表 ,206.反转链表
    203.移除链表元素LeetCode题目要求给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val==val的节点,并返回新的头节点。示例1输入:head=[......
  • Esxi8升级故障处理
    最近有个小项目,要给虚拟化升级。由于是版本是6.0,于是在测试环境中模拟升级到8.0。升级路径6.0-->6.7u2-->8.0 1、采用esxcli升级升到8.0后遇到报错:503Service......
  • 狂神说Go语言—I/O
    i:input读o:output写01010101流获取文件信息计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件。file类是在os包中的,封装了底层......