[BZOJ 4563]放棋子

题目

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

INPUT

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

OUTPUT

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

SAMPLE

INPUT

2
0 1
1 0

OUTPUT

1

解题报告

一道读入都不用打完的题= =

只用读入$n$就好了QAQ

全错位排列往上一打,加个高精就好了QAQ

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdio>
  4. using namespace std;
  5. struct bign{
  6. int a[],len;
  7. bign():len(){memset(a,,sizeof(a));}
  8. bign(const char *s){*this=s;}
  9. bign(const int &x){*this=x;}
  10. inline void operator=(const char *s){
  11. len=strlen(s);
  12. for(int i=;i<len;++i)
  13. a[i]=s[len-i-]-'';
  14. }
  15. inline void operator=(const int &x){
  16. char s[];
  17. memset(s,,sizeof(s));
  18. sprintf(s,"%d",x);
  19. *this=s;
  20. }
  21. inline void clear(){while(len>&&!a[len-])--len;}
  22. inline bign operator+(const bign &x){
  23. bign ret;
  24. ret.len=max(len,x.len)+;
  25. int jw();
  26. for(int i=;i<len;++i){
  27. ret.a[i]=a[i]+x.a[i]+jw;
  28. jw=ret.a[i]/;
  29. ret.a[i]%=;
  30. }
  31. if(jw)
  32. ret.a[len++]=jw;
  33. ret.clear();
  34. return ret;
  35. }
  36. inline void operator+=(const bign &x){*this=*this+x;}
  37. inline bign operator-(const bign &x){
  38. bign ret;
  39. ret=*this;
  40. for(int i=;i<len;++i){
  41. if(ret.a[i]<x.a[i])
  42. ret.a[i]+=,--ret.a[i+];
  43. ret.a[i]=ret.a[i]-x.a[i];
  44. }
  45. ret.clear();
  46. return ret;
  47. }
  48. inline void operator-=(const bign &x){*this=*this-x;}
  49. inline bign operator-(const int &x){
  50. bign tmp(x);
  51. return *this-tmp;
  52. }
  53. inline void operator-=(const int &x){*this=*this-x;}
  54. inline bign operator*(const bign &x){
  55. bign ret;
  56. ret.len=len+x.len+;
  57. int jw;
  58. for(int i=;i<len;++i){
  59. jw=;
  60. for(int j=;j<x.len;++j){
  61. ret.a[i+j]+=a[i]*x.a[j]+jw;
  62. jw=ret.a[i+j]/;
  63. ret.a[i+j]%=;
  64. }
  65. ret.a[i+x.len]+=jw;
  66. }
  67. ret.clear();
  68. return ret;
  69. }
  70. inline void operator*=(const bign &x){*this=*this*x;}
  71. inline bign operator*(const int &x){
  72. bign tmp(x);
  73. return *this*tmp;
  74. }
  75. inline void operator*=(const int &x){*this=*this*x;}
  76. inline void print(){
  77. for(int i=len-;i>=;--i)
  78. printf("%d",a[i]);
  79. }
  80. }f[];
  81. int n;
  82. int main(){
  83. scanf("%d",&n);
  84. f[]=;
  85. f[]=;
  86. for(int i=;i<=n;++i)
  87. f[i]=(f[i-]+f[i-])*(i-);
  88. f[n].print();
  89. }

[BZOJ 4563]放棋子的更多相关文章

  1. BZOJ 4563: [Haoi2016]放棋子

    Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 389  Solved: 248[Submit][Status][Discuss] Descriptio ...

  2. BZOJ——T 4563: [Haoi2016]放棋子

    Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 387  Solved: 247[Submit][Status][Discuss] Descriptio ...

  3. BZOJ 3294: [Cqoi2011]放棋子

    3294: [Cqoi2011]放棋子 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 628  Solved: 238[Submit][Status] ...

  4. bzoj千题计划261:bzoj3294: [Cqoi2011]放棋子

    http://www.lydsy.com/JudgeOnline/problem.php?id=3294 如果一个颜色的棋子放在了第i行第j列,那这种颜色就会占据第i行第j列,其他颜色不能往这儿放 设 ...

  5. 【BZOJ 3294】 3294: [Cqoi2011]放棋子 (DP+组合数学+容斥原理)

    3294: [Cqoi2011]放棋子 Description Input 输入第一行为两个整数n, m, c,即行数.列数和棋子的颜色数.第二行包含c个正整数,即每个颜色的棋子数.所有颜色的棋子总数 ...

  6. 【BZOJ3294】放棋子(动态规划,容斥,组合数学)

    [BZOJ3294]放棋子(动态规划,容斥,组合数学) 题面 BZOJ 洛谷 题解 如果某一行某一列被某一种颜色给占了,那么在考虑其他行的时候可以直接把这些行和这些列给丢掉. 那么我们就可以写出一个\ ...

  7. BZOJ4563:[HAOI2016]放棋子——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4563 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列 ...

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

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

  9. [Haoi2016]放棋子 题解

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

随机推荐

  1. Luogu3403跳楼机

    https://zybuluo.com/ysner/note/1099616 题面 给你三个数\(x\),\(y\),\(z\),问你能够凑出多少个[1,\(h\)]之间的数. 解析 处理出\(y\) ...

  2. bzoj1008 [HNOI2008]越狱——快速幂

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1008 (这样一道水题还因为忘记写 %lld WA了那么多遍) 发生越狱的状态数,就是全部状态 ...

  3. ubuntu16.04 Kafka 安装

    Kafka核心概念: 下面介绍Kafka相关概念,以便运行下面实例的同时,更好地理解Kafka. 1. Broker Kafka集群包含一个或多个服务器,这种服务器被称为broker 2. Topic ...

  4. P3291 [SCOI2016]妖怪

    传送门 我数学的确白学了--这种题目竟然一点思路都没有-- 首先可以把每个妖怪看成二维平面上的一个点,那么每一个环境\((a,b)\)就可以看成一条斜率\(k=-\frac{b}{a}\)的过该点的直 ...

  5. C# 截取字符串——

    string  strID ="NODE_aSDFghsdfgyuhjidfgh_45678" //得到_ 中间的数 int index = strID.IndexOf(" ...

  6. NS2学习笔记(三)

    代理(Agents) 代理是网络层数据包产生和使用的端点,用于实现多层的协议.Agent类部分用OTcl实现,部分用C++实现.C++的代码在~ns/agent.cc和~ns/agent.h中,OTc ...

  7. 326 Power of Three 3的幂

    给出一个整数,写一个函数来确定这个数是不是3的一个幂.后续挑战:你能不使用循环或者递归完成本题吗? 详见:https://leetcode.com/problems/power-of-three/de ...

  8. Jquery和Ajax的关系!

    Jquery是一种JavaScript框架,而Ajax(Asynchronous JavaScript and XML)是异步JavaScript和XML. Jquery是JavaScript的框架, ...

  9. P1257 平面上的最接近点对

    题目描述 给定平面上n个点,找出其中的一对点的距离,使得在这n个点的所有点对中,该距离为所有点对中最小的 输入输出格式 输入格式: 第一行:n:2≤n≤200000 接下来n行:每行两个实数:x y, ...

  10. Android O Bitmap 内存分配

      我们知道,一般认为在Android进程的内存模型中,heap分为两部分,一部分是native heap,一部分是Dalvik heap(实际上也是native heap的一部分).   Andro ...