Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 389  Solved: 248
[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

HINT

 

Source

交换阵法的行列对于答案是没有影响的,所以我们可以将阴阳玉都
换到对角线上, 然后答案就变为了求 n 的错排数, 通过递推式即可求出。

f[n]=(n-1)*(f[n-1]+f[n-2]);

高精

考试丧心病狂的数据最大到5000 需要压位高精 代码底下有 。

屠龙宝刀点击就送

  1. #include <cstring>
  2. #include <cstdio>
  3. #define N 500
  4. #define MOD 10
  5.  
  6. inline int max(int a,int b) {return a>b?a:b;}
  7. struct node
  8. {
  9. int a[N];
  10. inline node operator+(node b)
  11. {
  12. node c;
  13. c.a[]=max(a[],b.a[])+;
  14. for(int i=;i<=c.a[];++i)
  15. {
  16. c.a[i]+=a[i]+b.a[i];
  17. c.a[i+]+=c.a[i]/MOD;
  18. c.a[i]=c.a[i]%MOD;
  19. }
  20. for(;c.a[]>&&c.a[c.a[]]==;c.a[]--);
  21. return c;
  22. }
  23. node() {memset(a,,sizeof(a));}
  24. }ans[N];
  25. int G[N][N],n;
  26. node operator*(int x,node b)
  27. {
  28. int t=;
  29. node c;
  30. c.a[]=b.a[]+;
  31. for(int i=;i<=c.a[];++i) c.a[i]=b.a[i]*x;
  32. for (int i=;i<=c.a[];i++)
  33. {
  34. c.a[i]+=t;
  35. if (c.a[i]>=MOD){t=c.a[i]/MOD;c.a[i]%=MOD;}
  36. else t=;
  37. }
  38. for(;t;t/=MOD) c.a[++c.a[]]=t%MOD;
  39. for(;c.a[]>&&c.a[c.a[]]==;c.a[]--);
  40. return c;
  41. }
  42. int Main()
  43. {
  44. scanf("%d",&n);
  45. ans[].a[]=;ans[].a[]=,ans[].a[]=ans[].a[]=;
  46. /* for(int i=1;i<=n;++i)
  47. for(int j=1;j<=n;++j)
  48. scanf("%d",&G[i][j]);*/
  49. for (int i=;i<=n;i++) ans[i]=(i-)*(ans[i-]+ans[i-]);
  50. printf("%d",ans[n].a[ans[n].a[]]);
  51. for (int i=ans[n].a[]-;i>=;i--) printf("%d",ans[n].a[i]);
  52. return ;
  53. }
  54. int sb=Main();
  55. int main(int argc,char *argv[]){;}
  1. #include <cstring>
  2. #include <cstdio>
  3. #define N 5005
  4. #define MOD 10000
  5.  
  6. inline int max(int a,int b) {return a>b?a:b;}
  7. struct node
  8. {
  9. int a[N];
  10. inline node operator+(node b)
  11. {
  12. node c;
  13. c.a[]=max(a[],b.a[])+;
  14. for(int i=;i<=c.a[];++i)
  15. {
  16. c.a[i]+=a[i]+b.a[i];
  17. c.a[i+]+=c.a[i]/MOD;
  18. c.a[i]=c.a[i]%MOD;
  19. }
  20. for(;c.a[]>&&c.a[c.a[]]==;c.a[]--);
  21. return c;
  22. }
  23. node()
  24. {memset(a,,sizeof(a));}
  25. }ans[N];
  26. int G[N][N],n;
  27. node operator*(int x,node b)
  28. {
  29. int t=;
  30. node c;
  31. c.a[]=b.a[]+;
  32. for(int i=;i<=c.a[];++i) c.a[i]=b.a[i]*x;
  33. for (int i=;i<=c.a[];i++)
  34. {
  35. c.a[i]+=t;
  36. if (c.a[i]>=MOD){t=c.a[i]/MOD;c.a[i]%=MOD;}
  37. else t=;
  38. }
  39. for(;t;t/=MOD) c.a[++c.a[]]=t%MOD;
  40. for(;c.a[]>&&c.a[c.a[]]==;c.a[]--);
  41. return c;
  42. }
  43. int Main()
  44. {
  45. freopen("firstmeet.in","r",stdin);
  46. freopen("firstmeet.out","w",stdout);
  47. scanf("%d",&n);
  48. ans[].a[]=;ans[].a[]=,ans[].a[]=ans[].a[]=;
  49. /* for(int i=1;i<=n;++i)
  50. for(int j=1;j<=n;++j)
  51. scanf("%d",&G[i][j]);
  52. */ for (int i=;i<=n;i++) ans[i]=(i-)*(ans[i-]+ans[i-]);
  53. printf("%d",ans[n].a[ans[n].a[]]);
  54. for (int i=ans[n].a[]-;i>=;i--) printf("%04d",ans[n].a[i]);
  55. return ;
  56. fclose(stdin);
  57. fclose(stdout);
  58. }
  59. int sb=Main();
  60. int main(int argc,char *argv[]){;}

丧心病狂的5000(压位)

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

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

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

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

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

  3. [Haoi2016]放棋子 题解

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

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

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

  5. 洛谷P3182 [HAOI2016]放棋子

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

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

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

  7. BZOJ4563: [Haoi2016]放棋子

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

  8. BZOJ 3294: [Cqoi2011]放棋子

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

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

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

随机推荐

  1. 《精通Spring4.X企业应用开发实战》读后感第四章(资源访问)

    package com.smart.resource; import org.springframework.core.io.ClassPathResource; import org.springf ...

  2. eclipse安装cppcheck

     简介: cppcheck 是一个 c 和 c++ 的静态的代码检查分析工具,不用运行程序就可以进行代码的检测. 可以检测一般的内存泄漏和程序编码错误 0.安装 cppcheck 1.57版本,这个版 ...

  3. Swoole 协程与 Go 协程的区别

    Swoole 协程与 Go 协程的区别 进程.线程.协程的概念 进程是什么? 进程就是应用程序的启动实例. 例如:打开一个软件,就是开启了一个进程. 进程拥有代码和打开的文件资源,数据资源,独立的内存 ...

  4. [翻译]Nativescript 中 Web 视图与 Android/IOS 的双向通信

    English document From http://shripalsoni.com/blog/nativescript-webview-native-bi-directional-communi ...

  5. Image Processing - Pseudo(False) Color Processing

    最近在一个项目中有需要用到将图片从GrayScale转为FalseColor,然而百度了一下Halcon 伪彩色等关键字均找不到相关答案,倒是有很多OpenCV和Matlab的...后来在搜索中看到了 ...

  6. 聊聊心跳机制及netty心跳实现

    我们在使用netty的时候会使用一个参数,ChannelOption.SO_KEEPALIVE为true, 设置好了之后再Linux系统才会对keepalive生效,但是linux里边需要配置几个参数 ...

  7. PAT甲级真题及训练集

    正好这个"水水"的C4来了 先把甲级刷完吧.(开玩笑-2017.3.26) 这是一套"伪题解". wacao 刚才登出账号测试一下代码链接,原来是看不到..有空 ...

  8. jzoj6008. 【THUWC2019模拟2019.1.18】Sequence (矩阵加速)

    题面 茉优最近研究发现,一个人的想愿能力可以认为是字符串S的一个子串S[l,r],而连接值可以认为是这个子串的本质不同子序列个数.现在她想验证她的结论是否正确,于是她给了你Q个询问,希望你帮她来计算, ...

  9. 记录错误:tomcat“socket close”错误

    Error running 'Tomcat 8.5.37': Unable to open debugger port (127.0.0.1:9562) 使用打开cmd.exe 输入 1)taskli ...

  10. EOS Bios Boot Sequence

    EOS version:v1.0.5 Date:2018-06-19 Host: Centos 7 Reference :https://github.com/EOSIO/eos/wiki/Tutor ...