zoukankan      html  css  js  c++  java
  • HDU 1465 不容易系列之一

    扯淡

    貌似有傻逼的做法XD
    话说我没开long long,忘读入n,忘了清零ans WA了三遍是什么操作啊
    傻了傻了

    思路

    显然是一个错排问题啊XD
    但是我们不套公式,我们用一发二项式反演
    二项式反演的一个基本形式是

    [F_n=Sigma_{i=0}^n C_n^i G_i Rightarrow G_n=Sigma_{i=0}^n(-1)^{n-i}C_n^i F_i ]

    套入这道题中,我们可以首先确定k个位置的值是正确的,则有

    [n!=Sigma_{i=0}^nC_n^iF_i ]

    推出

    [F_i=Sigma_{i=0}^n(-1)^{n-i}C_n^i i! ]

    根据组合数的公式,推出

    [ans=n!Sigma_{i=0}^n(-1)^{n-i}frac{1}{(n-i)!} ]

    代码

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    long long jc[30],n;
    long long ans=0;
    int main(){
        jc[0]=1;
        for(int i=1;i<=20;i++)
            jc[i]=jc[i-1]*i;
        while(scanf("%lld",&n)==1){
            ans=0;
            for(int i=0;i<=n;i++)
                ans+=((i%2)?-1:1)*jc[n]/jc[i];
            printf("%lld
    ",ans);
        }
    }
    
  • 相关阅读:
    LRu Cache算法原理
    c# 哈希表
    c# 获取二维数组的行数和列数
    Linq
    DataTable使用
    Wpf学习
    数据库配置
    js 数字保留两位小树
    平面数据转换为树形结构
    mysql操作
  • 原文地址:https://www.cnblogs.com/dreagonm/p/10428147.html
Copyright © 2011-2022 走看看