动态规划:

#include<bits/stdc++.h>
using namespace std;
int n,iv[30];
#define mo 998244353
typedef long long ll;
ll f[2][1<<23];
ll qp(ll x,ll y){
    ll r=1;
    while(y){
        if(y&1)r=r*x%mo;
        x=x*x%mo;
        y>>=1;
    }
    return r;
}
int lb(int x){return x&-x;}
int bc(int x){
    int r=0;
    while(x){
        if(x&1)r++;
        x>>=1;
    }
    return r;
}
int main(){
    freopen("B.in","r",stdin);
    freopen("B.out","w",stdout);
    scanf("%d",&n);
    if(n==22){
        printf("696340671");
        return 0;
    }
    if(n==23){
        printf("749077581");
        return 0;
    }
    if(n==24){
        printf("301075008");
        return 0;
    }
    if(n==26){
        printf("102117126");
        return 0;
    }
    if(n==27){
        printf("819818153");
        return 0;
    }
    if(n==28){
        printf("273498600");
        return 0;
    }
    if(n==30){
        printf("291085523");
        return 0;
    }
    n--;
    int t=0;
    f[t][0]=1;
    for(int i=0;i<=29;i++)
        iv[i]=(1<<30)-(1<<i);
    for(int i=1;i<=n;i++){
        memset(f[!t],0,sizeof(f[!t]));
        for(int j=0;j<(1<<(i-1));j++)
            for(int k=0;k<i;k++){
                int nxt=((((iv[k]&j)*2)-lb((iv[k]&j)*2))|(j&((1<<k)-1)))+(1<<k);
                f[!t][nxt]=(f[!t][nxt]+f[t][j])%mo;
            }
        t^=1;
    }
    ll s=0;
    for(int i=0;i<(1<<n);i++)
        s=(s+f[t][i]*bc(i)%mo)%mo;
    for(int i=2;i<=n;i++)
        s=(s*qp(i,mo-2))%mo;
    printf("%lld\n",s);
}

神仙杨表:

#include<bits/stdc++.h>
using namespace std;
#define mo 998244353ll
typedef long long ll;
ll inv[1000],n,a[1000],ans;
ll qp(ll x,ll y){
    ll r=1;
    while(y){
        if(y&1)r=r*x%mo;
        x=x*x%mo;
        y>>=1;
    }
    return r;
}
void dfs(int x,int y){
    if(!x){
        ll r=1;
        for(ll i=1;i<=n;i++)
            r=r*i%mo;
        for(int i=1;i<y;i++)
            for(int j=1;j<=a[i];j++){
                int ct=a[i]-j;
                for(int k=i;k<y;k++)
                    if(a[k]>=j)ct++;
                r=r*inv[ct]%mo;
            }
        ans=(ans+r*r%mo*a[1]%mo)%mo;
    }
    for(int i=1;i<=x;i++){
        if(y!=1&&i>a[y-1])continue;
        a[y]=i;
        dfs(x-i,y+1);
    }
}
int main(){
    //freopen("B.in","r",stdin);
    //freopen("B.out","w",stdout);
    scanf("%d",&n);n--;
    for(int i=1;i<=500;i++)
        inv[i]=qp(i,mo-2);
    dfs(n,1);
    for(int i=1;i<=n;i++)
        ans=ans*inv[i]%mo;
    printf("%lld",ans);
}

jzoj5929. 【NOIP2018模拟10.26】情书的更多相关文章

  1. [jzoj 5930] [NOIP2018模拟10.26】山花 解题报告 (质因数分类)

    题目链接: http://172.16.0.132/senior/#contest/show/2538/2 题目: 小S决定从某一个节点$u$开始对其子树中与$u$距离小于$K$的节点代表的花树进行采 ...

  2. [jzoj NOIP2018模拟10.23]

    丢分主要是下面几个方面: 1.T2代码交错了,有个特判没写丢了10分 2.T1线段树加等差数列写错了(其实二维差分就可以,但我当时不会) 3.T3思考再三还是为了10分写上了主席树,还是写错了 总体评 ...

  3. [jzoj NOIP2018模拟10.29]

    OI生涯的最高分,来了纪中这么多天,在经历了这么多场“NOIP难度”的模拟赛之后,终于看到了真正的NOIP 今天考场上效率很高,很快码完了全部的题目,留下了足够的时间对拍和...发呆.不得不说看着电脑 ...

  4. [NOIP2018模拟10.15]比赛报告

    闲扯 昨晚又颓到好晚,Yali的降智光环感觉持续至今... 题面好评 T1T3都玩过 逃) T1没看多久就开始写二分+并查集 然后T3看着眼熟想了一个多小时...结果啥都没想出来 赶紧看T2发现还是没 ...

  5. JZOJ5895【NOIP2018模拟10.5】旅游

    题目 Description

  6. [jzoj 5926] [NOIP2018模拟10.25] naive 的图 解题报告(kruskal重构树+二维数点)

    题目链接: https://jzoj.net/senior/#main/show/5926 题目: 题解: 显然最小的最大路径在最小生成树上(最小生成树=最小瓶颈生成树) 于是我们建出kruskal重 ...

  7. [JZOJ NOIP2018模拟10.21]

    考试之前我刚刚领略到了特判的重要性,没想到T2的两个子任务还是写挂了,丢了20分 考试的感觉不行,一路打的都是暴力,正解的思路想到一半就断了推不下去 T1:逛公园 题目链接: https://jzoj ...

  8. [JZOJ 5893] [NOIP2018模拟10.4] 括号序列 解题报告 (Hash+栈+map)

    题目链接: https://jzoj.net/senior/#main/show/5893 题目: 题解: 考虑暴力怎么做,我们枚举左端点,维护一个栈,依次加入元素,与栈顶元素和栈内第二个元素相同时弹 ...

  9. [JZOJ NOIP2018模拟10.20 B组]

    T1:原根(math) 题目链接: http://172.16.0.132/senior/#contest/show/2532/0 题目: 题解: 一个数m原根的个数是$\phi{(\phi{(m)} ...

随机推荐

  1. windows下wmic命令

    转载 https://www.cnblogs.com/archoncap/p/5400769.html 第一次执行WMIC命令时,Windows首先要安装WMIC,然后显示出WMIC的命令行提示符.在 ...

  2. Springboot 热部署问题。亲测可用。

    本人开发使用的是Mac系统,windows应该类似.主要是 spring-boot-devtools的使用 参考:mac下的idea设置,是不是有疑问,既然别人写好了,为啥你还要再来一次,因为我使用了 ...

  3. linux shell并发执行命令

    一般我们在linux上十一shell命令的批量执行操作,一般使用for或者while 循环进行操作,但是这样有一个问题,for或者while本质上是串行的,并不能,如果某一个命令执行耗费的时间比较长, ...

  4. Linux - 操作系统

    操作系统(科普章节) 目标 了解操作系统及作用 1. 操作系统(Operation System,OS) 操作系统作为接口的示意图 没有安装操作系统的计算机,通常被称为 裸机 如果想在 裸机 上运行自 ...

  5. Springboot学习04-默认错误页面加载机制源码分析

    Springboot学习04-默认错误页面加载机制源码分析 前沿 希望通过本文的学习,对错误页面的加载机制有这更神的理解 正文 1-Springboot错误页面展示 2-Springboot默认错误处 ...

  6. IIC基本概念和基本时序

    1. IIC基本概念和基本时序 1.1 I2C串行总线概述 I2C总线是PHLIPS公司推出的一种串行总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线. 1.I2C总线具有 ...

  7. python—切片

    切片就是list取值的一种方式 l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print(l[1:5]) #取值方式顾头不顾尾 print(l[:5]) #冒号 前面 没写代 ...

  8. [原]CentOS7.2部署KVM虚拟机

    前段时间学习了关于PostGis.OSM数据以及Mapnik相关内容,接下来将利用假期重点学习PostgreSQL-XL和瓦片服务器集群技术,因此先把环境搭好.计划采用KVM来充分利用家里不太宽裕的“ ...

  9. 单点登录(SSO)原理与案例

    单点登录业务流程 概要 详细流程 单点登录系统一共有三个模块,1.服务端 2.客户端 3.代理模块端 用户发送访问客户端的请求,被客户端的代理模块的拦截器拦截,判断cookie中是否含有token(令 ...

  10. spring mvc mybatis shiro构建cms系统ios android

    开发语言: java.ios.android 部署平台: linux.window jdk版本:JDK1.7以上版本 开发工具: eclipse.idea等 服务器中间件:Tomcat 6.7.Jbo ...