4563: [Haoi2016]放棋子

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 387  Solved: 247
[Submit][Status][Discuss]

Description

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

Input

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

Output

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

Sample Input

2
0 1
1 0

Sample Output

1
 
  1. /*
  2. 每一行每一列只能放1个求方案数 转化为错排问题
  3. 练习高精压位 压9位。。。
  4. */
  5. #include <iostream>
  6. #include <cstdio>
  7. #include<iomanip>
  8.  
  9. #define N 2001
  10. #define mod 1000000000
  11. #define _ 9
  12. #define ll long long
  13.  
  14. using namespace std;
  15. ll n;
  16. struct num
  17. {
  18. ll d[N],w;
  19. /* void print()
  20. {
  21. for (ll i=w;i>=1;i--) cout<<d[i];
  22. printf("\n");
  23. }*/
  24. }D[N],id;
  25.  
  26. num operator +(num p1,num p2)
  27. {
  28. num ret=id;
  29. ll g=;
  30. if (p1.w<p2.w) swap(p1,p2);
  31. ret.w=p1.w;
  32. for (ll i=;i<=p1.w;i++)
  33. {
  34. ret.d[i]=(p1.d[i]+p2.d[i]+g)%mod;
  35. g=(p1.d[i]+p2.d[i]+g)/mod;
  36. }
  37. while(g) ret.d[++ret.w]=g%mod , g/=mod;
  38. return ret;
  39. }
  40.  
  41. num mul(num p1,ll p2)
  42. {
  43. num ret=id;
  44. ret.w=p1.w;
  45. ll g=;
  46. for (ll i=;i<=p1.w;i++)
  47. {
  48. ret.d[i]=(p1.d[i]*p2+g)%mod;
  49. g=(p1.d[i]*p2+g)/mod;
  50. }
  51. while(g) ret.d[++ret.w]=g%mod,g/=mod;
  52. return ret;
  53. }
  54.  
  55. ostream& operator << (ostream &os,num x)
  56. {
  57. ll i;
  58. os<<x.d[x.w];
  59. for(i=x.w-;i;i--)
  60. os<<setfill('')<<setw(_)<<x.d[i];
  61. return os;
  62. }
  63.  
  64. int main()
  65. {
  66. scanf("%d",&n);
  67. if (n == )
  68. {
  69. puts("");
  70. return ;
  71. }
  72. D[]=id;
  73. D[].w=D[].d[]=;
  74. for (ll i=;i<=n;i++)
  75. D[i] = mul((D[i-]+D[i-]),i-);
  76. cout<<D[n];
  77. return ;
  78. }

bzoj4563: [Haoi2016]放棋子(错排+高精)的更多相关文章

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

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

  2. BZOJ4563: [Haoi2016]放棋子

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

  3. JZYZOJ1544 [haoi2016T2]放棋子 错排公式 组合数学 高精度

    http://172.20.6.3/Problem_Show.asp?ID=1544&a=ProbNF 看了题解才意识到原题有错排的性质(开始根本不知道错排是什么). 十本不同的书放在书架上. ...

  4. BZOJ4563 HAOI2016放棋子(高精度)

    没看清题还以为是要求数最大匹配数量……注意到任意障碍不在同一行同一列,且恰好有n个障碍,不妨通过交换列使得第i行第i列均有障碍.那么就是个错排了.居然wa了一发简直没救. #include<io ...

  5. 洛谷P3182 [HAOI2016]放棋子

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

  6. [Haoi2016]放棋子 题解

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

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

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

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

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

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

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

随机推荐

  1. Liunx学习笔记(三) 文件权限

    一.文件权限 1.查看文件权限 (1)文件权限 在 Linux 中对于文件有四种访问权限,列举如下: 可读取:r,Readable 可写入:w,Writable 可执行:x,Execute 无权限:- ...

  2. DemoKit编译过程错误

    1.编译出错: 2.原因(将代码注释):

  3. 洛谷 2471 BZOJ 1067 [SCOI2007]降雨量

    [题解] 用线段树维护区间最大值(因为没有修改,St表也可以),然后由于x,y可能是降雨量未知的年份,需要进行分类讨论. #include<cstdio> #include<algo ...

  4. Python基础之生成器、迭代器

    一.字符串格式化进阶 Python的字符串格式化有两种方式: 百分号方式.format方式,由于百分号的方式相对来说比较老,在社区里讨论format方式有望取代百分号方式,下面我们分别介绍一下这两种方 ...

  5. 【Codeforces 140C】New Year Snowmen

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 每次都选择剩余个数最多的3个不同数字组成一组. 优先消耗剩余个数多的数字 这样能尽量让剩余的数字总数比较多,从而更加可能得到更多的3个组合 [ ...

  6. Java基础学习总结(81)——如何尽可能的减少Java代码中bug

    Java编程语言的人气自然无需质疑,从Web应用到Android应用,这款语言已经被广泛用于开发各类应用及代码中的复杂功能. 不过在编写代码时,bug永远是困扰每一位从业者的头号难题.在今天的文章中, ...

  7. springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验--异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档---jpa访问数据库及page进行分页---整合redis---定时任务

    springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验-- 异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档 ...

  8. 【Java基础】基本类型与运算【重要】

    0.   Java基本数据类型 Java的位运算(bitwise operators)直接对整数类型的位进行操作,这些整数类型包括long.int.short.char和 byte,位运算符具体如下表 ...

  9. BAT经典面试题,深入理解Java内存模型JMM

    Java 内存模型 Java 内存模型(JMM)是一种抽象的概念,并不真实存在,它描述了一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段.静态字段和构成数组对象的元素)的访问方式.试图屏 ...

  10. tapset::iosched(3)

    DESCRIPTION This family of probe points is used to probe the IO scheduler activities. It contains th ...