P3182 [HAOI2016]放棋子

题目描述

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

输入输出格式

输入格式:

第一行一个N,接下来一个N*N的矩阵。N<=200,0表示没有障碍,1表示有障碍,输入格式参考样例

输出格式:

一个整数,即合法的方案数。

输入输出样例

输入样例#1:

2
0 1
1 0
输出样例#1:

1
/*
错排公式+压位高精(压了4位)
错排公式f(n)=(n-1)*(f(n-1)+f(n-2))
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define maxn 5010
int a[],b[],c[];
int n,m,map[maxn][maxn];
struct node{
int zu[],len;
node operator + (const node x)const{
memset(a,,sizeof(a));
memset(b,,sizeof(b));
memset(c,,sizeof(c));
for(int i=len,j=;i>=;i--,j++)a[i]=zu[j];
for(int i=x.len,j=;i>=;i--,j++)b[i]=x.zu[j];
int l=max(len,x.len);
for(int i=;i<=l;i++){
c[i]+=a[i]+b[i];
c[i+]+=c[i]/;
c[i]=c[i]%;
}
while(c[l+]){
l++;
c[l+]+=c[l]/;
c[l]=c[l]%;
}
node res;
res.len=l;
for(int i=,j=l;i<=l;i++,j--)res.zu[i]=c[j];
return res;
}
node operator * (const int x)const{
memset(a,,sizeof(a));
memset(b,,sizeof(b));
for(int i=,j=len;i<=len;i++,j--)a[i]=zu[j];
for(int i=;i<=len;i++){
b[i]+=a[i]*x;
b[i+]+=b[i]/;
b[i]=b[i]%;
}
int l=len;
while(b[l+]){
l++;
b[l+]+=b[l]/;
b[l]=b[l]%;
}
node res;
res.len=l;
for(int i=,j=l;i<=l;i++,j--)res.zu[i]=b[j];
return res;
}
}f[maxn];
int main(){
scanf("%d",&n);
f[].len=,f[].zu[]=;
f[].len=,f[].zu[]=;
for(int i=;i<=n;i++)
f[i]=(f[i-]+f[i-])*(i-);
printf("%d",f[n].zu[]);
for(int i=;i<=f[n].len;i++)printf("%04d",f[n].zu[i]);
return ;
}

洛谷P3182 [HAOI2016]放棋子的更多相关文章

  1. 洛谷 P3182 [HAOI2016]放棋子(高精度,错排问题)

    传送门 解题思路 不会错排问题的请移步——错排问题 && 洛谷 P1595 信封问题 这一道题其实就是求对于每一行的每一个棋子都放在没有障碍的地方的方案数. 因为障碍是每行.每列只有一 ...

  2. 洛谷 P3182 [HAOI2016]放棋子(错排问题)

    题面 luogu 题解 裸的错排问题 错排问题 百度百科:\(n\)个有序的元素应有\(n!\)个不同的排列,如若一个排列使得所有的元素不在原来的位置上,则称这个排列为错排:有的叫重排.如,1 2的错 ...

  3. [洛谷P3158] [CQOI2011]放棋子

    洛谷题目链接:[CQOI2011]放棋子 题目描述 在一个m行n列的棋盘里放一些彩色的棋子,使得每个格子最多放一个棋子,且不同 颜色的棋子不能在同一行或者同一列.有多少祌方法?例如,n=m=3,有两个 ...

  4. 洛谷P3158 [CQOI2011]放棋子 组合数学+DP

    题意:在一个m行n列的棋盘里放一些彩色的棋子,使得每个格子最多放一个棋子,且不同颜色的棋子不能在同一行或者同一列.有多少祌方法? 解法:这道题不会做,太菜了qwq.题解是看洛谷大佬的. 设C是组合数, ...

  5. 【BZOJ4563】[Haoi2016]放棋子 错排+高精度

    [BZOJ4563][Haoi2016]放棋子 Description 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在这个矩阵上放N枚棋子(障碍 ...

  6. bzoj4563: [Haoi2016]放棋子(错排+高精)

    4563: [Haoi2016]放棋子 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 387  Solved: 247[Submit][Status] ...

  7. [Haoi2016]放棋子 题解

    4563: [Haoi2016]放棋子 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 440  Solved: 285[Submit][Status] ...

  8. BZOJ4563: [Haoi2016]放棋子

    Description 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在 这个矩阵上放N枚棋子(障碍的位置不能放棋子),要求你放N个棋子也满足每行 ...

  9. [HAOI2016] 放棋子及错排问题

    题目 Description 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在这个矩阵上放N枚棋子(障碍的位置不能放棋子),要求你放N个棋子也满足 ...

随机推荐

  1. 关于引用WebLogic.jar时遇到NoClassDefFoundError问题的解决方法

    前段时间在做一个项目开发时,需要用到weblogic.jndi.WLInitialContextFactory,所以按照以前的经验,将WebLogic.jar添加到Build Path中.可是在执行时 ...

  2. PAT 甲级 1028. List Sorting (25) 【结构体排序】

    题目链接 https://www.patest.cn/contests/pat-a-practise/1028 思路 就按照 它的三种方式 设计 comp 函数 然后快排就好了 但是 如果用 c++ ...

  3. Eureka 集群

    集群搭建是在单节点基础上做的 单节点注册中心搭建-->https://www.cnblogs.com/chenglc/p/9561295.html 在单节点的基础上修改配置文件 bootstra ...

  4. 学习 Promise,掌握未来世界 JS 异步编程基础

    其实想写 Promise 的使用已经很长时间了.一个是在实际编码的过程中经常用到,一个是确实有时候小伙伴们在使用时也会遇到一些问题.Promise 也确实是 ES6 中 对于写 JS 的方式,有着真正 ...

  5. <J2EE学习笔记>关于Servlet的讲义

    题外话:接触java又是半年之前的事情了,当初好好学了java却把cpp给忘了,到现在又把手里发热的cpp给放下重新捡起来java,究竟这两种OOP语言我能不能清晰分开记住呢 以下全部课件来自于同济大 ...

  6. POJ3415 Common Substrings —— 后缀数组 + 单调栈 公共子串个数

    题目链接:https://vjudge.net/problem/POJ-3415 Common Substrings Time Limit: 5000MS   Memory Limit: 65536K ...

  7. 同级别中枢重叠后的走势分类---walkspeed

    同级别走势的中枢震荡有重叠,即意味当下级别走势类型是不能延续啦.走势级别开始升级.根据走势分解定理,可知走势能划分出至少三段当下级别的走势类型. 有三段同级别完成的走势类型,就必须有三个同级别的中枢. ...

  8. Cocos2d-x中单例的使用

    大家都知道一个程序中只有一个导演类,eg: CCDirector *pDirectory = CCDirector::sharedDirector();//初始化导演类. 可通过 pDirectory ...

  9. MySQL性能优化/调优:默认配置的修改

    在这里罗列一下这些配置, 每次新装MySQL的时候, 最好根据实际需要调整一下这些配置: max_connections 最大并发连接数.当MySQL的并发连接达到这个设定值时,新的连接将会被拒绝.当 ...

  10. linkedhashSet和hashSet和TreeSet的区别(转)

    Set接口Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false.Set判断两个对象相同不是使用==运算符,而是根据equals方法.也就是说,只要两个对象用eq ...