求和(第二斯特林数+ntt)

题目:

https://www.luogu.com.cn/problem/P4091

思路:

代码:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<unordered_map>
using namespace std;
#define  LL long long 
const int N =4e5+100;
const double PI = acos(-1);
LL mod = 998244353,gi=3,gg,g[N],f[N],h[N],rel[N];
int n, tot, bit;
LL quick(LL a, LL b, LL mod)
{
    LL ans = 1;
    while (b)
    {  
        if (b & 1) ans = ans * a % mod;
        b >>= 1;
        a = a * a % mod;
    }
    return ans;
}
void init()
{  
    h[0] = 1;
    for (int i = 1; i <= n; i++)
        h[i] = i * h[i - 1] % mod;
    g[0] = f[0] = 1;
    g[1] = -1;
    f[1] = (n + 1)%mod;
    for (int i = 2; i <= n; i++)
    {
        LL x = quick(h[i], mod - 2, mod), y = quick(i, n + 1, mod)-1;
        g[i] = x;
        if (i % 2) g[i] *= -1;
        x =quick((h[i]*(i - 1))%mod, mod - 2, mod);
        f[i] = x * y % mod;
    }
}
void ntt(LL a[], int op)
{
    for (int i = 0; i < tot; i++)
        if (i < rel[i]) swap(a[i], a[rel[i]]);
    for (int m = 2; m <= tot; m <<= 1)
    {
        LL gk = quick(op == 1 ? gi : gg, (mod - 1) / m, mod);
        for (int i = 0; i < tot; i += m)
        {
            LL  g1 = 1;
            for (int j = 0; j < m / 2; j++)
            {
                LL x = a[i + j], y = a[i + j + m / 2] * g1%mod;
                a[i + j] = (x + y) % mod;
                a[i + j + m / 2] = ((x - y) % mod + mod) % mod;
                g1 = g1 * gk % mod;
            }
      }
    }
    if (op == -1)
    {
        LL gk = quick(tot, mod - 2, mod);
        for (int i = 0; i < tot; i++)
            a[i] = a[i] * gk % mod;
    }
}
int main() {
    cin >> n;
    init();
    while ((1 << bit) < 2 * n + 1) bit++;
    tot = 1 << bit;
    for (int i = 0; i < tot; i++) rel[i] = rel[i / 2] / 2 + ((i & 1) ? tot / 2 : 0);
    gg = quick(gi, mod - 2, mod);
    ntt(f, 1);
    ntt(g, 1);
    for (int i = 0; i < tot; i++)
        f[i] = f[i] * g[i] % mod;
    ntt(f, -1);
    LL ans = 0;
   
    for (int i = 0; i <= n; i++)
    {
        ans = (ans + h[i] * quick(2,i,mod) % mod * f[i] % mod) % mod;
    }
    cout << ans << endl;
    return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/525361.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web渗透测试流程

什么是渗透测试 渗透测试 (penetration test),是通过模拟恶意黑客的攻击方法&#xff0c;来评估计算机网络系统安全的一种评估方法。这个过程包括对系统的任何弱点、技术缺陷或漏洞的主动分析&#xff0c;这个分析是从一个攻击者可能存在的位置来进行的&#xff0c;并且从这个…

Linux(Centos7)安装Docker 教程

目录 1&#xff0c;卸载旧版本2&#xff0c;安装docker软件包3,设置镜像仓库地址4,安装最新版Docker Engine容器5&#xff0c;启动Docker 要安装Docker Engine&#xff0c;您需要CentOS 7或8的维护版本。不支持或未测试存档版本。 1&#xff0c;卸载旧版本 sudo yum remove do…

二,几何相交---4,BO算法---(1)接近性和可分离性

提了三个观点 1&#xff0c;如果一条直线&#xff08;比如竖直&#xff09;可以分开两个线段&#xff0c;则这两个线段不相交 2&#xff0c;只需要观察与隔离线相交的几个线段 3&#xff0c;从左向右扫描线只需要观察每个线段的两个端点和一些可能的相交点。

【漏洞复现】TeamCity身份验证绕过漏洞CVE-2024-27198

漏洞描述 JetBrains TeamCity是一款由JetBrains开发的持续集成和持续交付(CI/CD)服务器。它提供了一个功能强大的平台,用于自动化构建、测试和部署软件项目。TeamCity旨在简化团队协作和软件交付流程,提高开发团队的效率和产品质量。 JetBrains TeamCity在2023.11.4版本之前…

基于SSM技术的宠物寄存系统设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 相关技术介绍 3 1.1 开发技术语言 3 1.1.1 Java 3 1.1.2 Ajax 3 1.1.3 JavaScript 3 1.2 开发框架 4 1.2.1 Spring 4 1.2.2 Spring MVC 4 1.2.3 Mybatis 4 1.2.4 Bootstrap 5 1.3 MySQL数据库 5 1.4 本章小结 6 2 系统分析 7 2.1 系统的需…

探索代理服务器:保护您的网络安全与隐私

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Linux ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 隐藏真实IP地址&#xff1a; 访问控制&#xff1a; 加速访问速度&#xff1a; 过滤内容&#xff1a; 突破访问限制&#xff1…

【web | CTF】BUUCTF [强网杯 2019]随便注

天命&#xff1a;这题考点有两个&#xff0c;第一个是闭合&#xff0c;第二个是叠堆注入 先探测一下是不是单引号闭合&#xff0c;其实我一开始以为是没有引号闭合的&#xff0c;毕竟是数字 经过测试&#xff0c;的确是单引号闭合 然后探测未知的东西&#xff0c;我习惯性直接…

● 309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费

● 309.最佳买卖股票时机含冷冻期 多加条件&#xff1a;卖出之后有一天冷冻期不能买入&#xff0c;即卖出之后至少隔一天才能再买入。 要搞清楚每一天有什么状态&#xff1a;持有股票&#xff08;已买入&#xff09;、不持有股票&#xff08;已卖出&#xff09;。不持有股票…

Unity DropDown 组件 详解

Unity版本 2022.3.13f1 Dropdown下拉菜单可以快速创建大量选项 一、 Dropwon属性详解 属性&#xff1a;功能&#xff1a;Interactable此组件是否接受输入&#xff1f;请参阅 Interactable。Transition确定控件以何种方式对用户操作进行可视化响应的属性。请参阅过渡选项。Nav…

数据分析-Pandas最简单的方法画矩阵散点图

数据分析-Pandas直接画矩阵散点图 数据分析和处理中&#xff0c;难免会遇到各种数据&#xff0c;那么数据呈现怎样的规律呢&#xff1f;不管金融数据&#xff0c;风控数据&#xff0c;营销数据等等&#xff0c;莫不如此。如何通过图示展示数据的规律&#xff1f; 数据表&…

idea连接远程服务器

1. 双击shift&#xff0c;出现如下界面 2. 远程连接 原文来自这个up主的&#xff0c;点击蓝色字体就可以跳转啦&#xff01; 输入主机ip、用户名、密码&#xff0c;点击Test Connection验证&#xff0c;最后点击ok添加成功 有用的话记得给俺点个赞&#xff0c;靴靴~

YOLOX论文解读

paper&#xff1a;YOLOX: Exceeding YOLO Series in 2021 official implementation&#xff1a;https://github.com/Megvii-BaseDetection/YOLOX 本文的创新点 本文在YOLOv3的基础上进行了一些改进&#xff1a;包括将检测头进行解耦的decoupled head、从anchor-based转为anc…