前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[HAOI2016]放棋子(错排+高精度)

[HAOI2016]放棋子(错排+高精度)

作者头像
杨鹏伟
发布2021-04-30 14:25:53
6940
发布2021-04-30 14:25:53
举报
文章被收录于专栏:ypw

题意: 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在这个矩阵上放N枚棋子(障碍的位置不能放棋子),要求你放N个棋子也满足每行只有一枚棋子,每列只有一枚棋子的限制,求有多少种方案。

思路: 假设我们把每行障碍上的那个元素 当做 元素本来就在的位置。

那么题意就是让其全部错位—没有一个元素是在他原本的位置上

我们处理这样一个数组f[n]表示n个数错排的方案数

代码语言:javascript
复制
f[n] = (f[n-1] + f[n-2])*(n-1)
f[1] = 0
f[2] = 1

由于n为200,并且题目没有要求取模,所以我们要需要敲一个高精度的板子。

code

代码语言:javascript
复制
#include<bits/stdc++.h> 
#define N 205
using namespace std;

int n;

struct BigInteger{
    vector<int> a;
    BigInteger(){ a.clear(); }
    BigInteger operator = (long long num){
        a.clear();
        do{
            a.push_back(num % 10);
            num /= 10;
        }while(num);
        return *this;
    }
    BigInteger operator + (const BigInteger& B) const{
        BigInteger C;
        for(int i = 0, g = 0; ; i++){
            if(g == 0 && i >= a.size() && i >= B.a.size())  break;
            int x = g;
            if(i < a.size())    x += a[i];
            if(i < B.a.size())  x += B.a[i];
            C.a.push_back(x % 10);
            g = x / 10;
        }
        return C;
    }
    BigInteger operator * (const BigInteger& B) const{
        BigInteger C;
        C.a.resize(a.size() + B.a.size());
        for(int i = 0; i < a.size(); i++){
            int g = 0;
            for(int j = 0; j < B.a.size(); j++){
                C.a[i+j] += a[i] * B.a[j] + g;
                g = C.a[i+j] / 10;
                C.a[i+j] %= 10;
            }
            C.a[i+B.a.size()] = g;
        }
        while(C.a.size() > 1 && C.a.back() == 0)    C.a.pop_back();
        return C;
    }
}f[N], t;

void print(BigInteger x){
    for(int i = x.a.size() - 1; i >= 0; i--)
        printf("%d", x.a[i]);
}

int main(){
    cin>>n;
    f[1] = 0ll,;
    f[2] = 1ll;
    for(int i = 3; i <= n; i++){
        t = i - 1ll;
        f[i] = (f[i-1] + f[i-2]) * t;
    }
    print(f[n]);
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/04/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档