题目描述

在一个大小为$N\times N$的棋盘上,放置了$N$个黑色的棋子。并且,对于棋盘的每一行和每一列,有且只有一个棋子。
现在,你的任务是再往棋盘上放置$N$个白色的棋子。显然,白色棋子不能与黑色棋子重合。在此基础上,放置的方式还需要满足:对于棋盘的每一行和每一列,有且只有一个白色棋子。
当然,放置的方式有很多种,你只需要输出不同的放置方案数即可。


输入格式

输入文件为$board.in$。
第一行包含一个正整数$N$。
接下来$N$行,每行$N$个整数用于描述棋盘。$0$表示这个位置是空的,而$1$表示这个位置有一个黑棋子。


输出格式

输出文件为$board.out$。
一行一个整数,表示合法的放置方案数。


样例

样例输入:

2
0 1
1 0

样例输出:

1


数据范围与提示

对于$20\%$的数据,满足$N\leqslant 10$。
对于$60\%$的数据,满足$N\leqslant 20$。
对于$100\%$的数据,满足$1\leqslant N\leqslant 200$。


题解

对于每一列,哪一行放黑子无所谓,那个就是逗你开心的。

先说一下我在考场上的思路,我想到了容斥和组合数。

首先,如果不考虑黑子,那么我们有$N!$种放法。

然后我们可以考虑有黑子的情况,设$f[i]$表示至少有$i$列合法的方案数,此处的合法是指白子和黑子没有放到一起,则:

$$f[i]=(N-i)!\times C_N^i$$

先来解释式子,$(N-i)!$表示剩下的我们还是可以随便选,$C_N^i$则表示在$N$列中选出$i$列。

最后答案就是$\sum \limits_{i=1}^N (-1)^i f[i]$。

然而这个式子太麻烦了,于是$170$行各种高精多和一就爆炸了……

下面来讲官方题解,问题就是让求$N$个数的错排方案数,那么直接用递推式即可:

$$ans_n=(ans_{n-1}+ans_{n-2})\times (n-1)$$

时间复杂度:$\Theta(n^2)$。

期望得分:$100$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
int n;
long long f[201][1000],flag1,flag2;
void pls(int x)
{
int jw=0;
f[x][0]=f[x-1][0];
for(int i=1;i<=f[x][0];i++)
{
f[x][i]=f[x-1][i]+f[x-2][i]+jw;
jw=f[x][i]/10;
f[x][i]%=10;
}
for(int i=f[x][0]+1;i;i++)
{
if(!jw)break;
f[x][i]+=jw;
jw=f[x][i]/10;
f[x][i]%=10;
f[x][0]=i;
}
}
void che(int x)
{
flag2=0;
for(int i=1;i<=f[x][0];i++)
{
flag1=f[x][i]*(x-1)+flag2;
f[x][i]=flag1%10;
flag2=flag1/10;
}
if(flag2)f[x][++f[x][0]]=flag2;
}
int main()
{
scanf("%d",&n);
f[1][1]=0;
f[2][1]=1;
f[2][0]=1;
for(int i=3;i<=n;i++)
{
pls(i);
che(i);
}
cout<<f[n][f[n][0]];
while(--f[n][0])
{
cout.fill('0');
cout<<setw(1)<<f[n][f[n][0]];
}
return 0;
}

rp++

[CSP-S模拟测试]:棋盘(数学+高精度)的更多相关文章

  1. [考试反思]0729NOIP模拟测试10

    安度因:哇哦. 安度因:谢谢你. 第三个rank1不知为什么就来了.迷之二连?也不知道哪里来的rp 连续两次考试数学都占了比较大的比重,所以我非常幸运的得以发挥我的优势(也许是优势吧,反正数学里基本没 ...

  2. 0823NOIP模拟测试赛后总结

    考了两场感觉虚了... NOIP模拟测试30 分着考的. 就只有T2的美妙的暴力拿分了,60分rank10,挂了. T1是一道sb题,爆零了十分遗憾. 许多人都掉进了输出格式的坑里,C没大写.少个空格 ...

  3. Android单元测试与模拟测试详解

    测试与基本规范 为什么需要测试? 为了稳定性,能够明确的了解是否正确的完成开发. 更加易于维护,能够在修改代码后保证功能不被破坏. 集成一些工具,规范开发规范,使得代码更加稳定( 如通过 phabri ...

  4. [开源]微信在线信息模拟测试工具(基于Senparc.Weixin.MP开发)

    目前为止似乎还没有看到过Web版的普通消息测试工具(除了官方针对高级接口的),现有的一些桌面版的几个测试工具也都是使用XML直接请求,非常不友好,我们来尝试做一个“面向对象”操作的测试工具. 测试工具 ...

  5. 安装nginx python uwsgi环境 以及模拟测试

    uwsgi帮助文档: http://uwsgi-docs-cn.readthedocs.io/zh_CN/latest/WSGIquickstart.html http://uwsgi-docs.re ...

  6. 【模拟】【数学】CSU 1803 2016 (2016湖南省第十二届大学生计算机程序设计竞赛)

    题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1803 题目大意: 给定n,m(n,m<=109)1<=i<=n,1& ...

  7. 利用Python中的mock库对Python代码进行模拟测试

    这篇文章主要介绍了利用Python中的mock库对Python代码进行模拟测试,mock库自从Python3.3依赖成为了Python的内置库,本文也等于介绍了该库的用法,需要的朋友可以参考下     ...

  8. 转 C#实现PID控制的模拟测试和曲线绘图

    C#实现PID控制的模拟测试和曲线绘图   本文分两部分,一部分是讲PID算法的实现,另一部分是讲如何用动态的曲线绘制出PID运算的结果. 首先,PID算法的理论模型请参考自动控制理论,最早出现的是模 ...

  9. Mockito:一个强大的用于Java开发的模拟测试框架

    https://blog.csdn.net/zhoudaxia/article/details/33056093 介绍 本文将介绍模拟测试框架Mockito的一些基础概念, 介绍该框架的优点,讲解应用 ...

随机推荐

  1. Swiper轮播隐藏再显示后不动

    公告用Swiper轮播方式,在某些不需要显示公告的页面进行隐藏,在需要展示公告的页面进行显示时候,公告不能正常轮播,在条件里加入重新设置轮播方法等网上的一些方法仍然不行,最后解决方法: this.my ...

  2. Where we love is home, home that our feet may leave, but not our hearts.

    parcel.n. 包裹 endurance.n.耐力 rot.v.腐烂 ornament.n.装饰 pinch.v.捏 nationality.n.国家 sunshine.n.阳光 stagger. ...

  3. Hadoop and Big Data

    Hadoop(1): HDFS Basics Hadoop(2):HDFS Block Management Hadoop(3): Prepare inputs for MapReduce mappe ...

  4. vue中的provide/inject讲解

    最近在看element-ui的源码,发现了一个这样的属性:inject.遂查看官网provider/inject provider/inject:简单的来说就是在父组件中通过provider来提供变量 ...

  5. 常用js方法封装使用

    // 冒泡排序 export function bubbleSort(arr) { let i = arr.length - 1; while (i > 0) { let maxIndex = ...

  6. sql中的isnull

    ISNULL 使用指定的替换值替换 NULL. 语法ISNULL ( check_expression , replacement_value ) 参数check_expression 将被检查是否为 ...

  7. [Python3 填坑] 006 “杠零”,空字符的使用

    目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 \0 是空字符,输出时看不到它,但它占 1 个字符的长度 2.2 \0 "遇八进制失效" 2.3 \0 与 '' 不 ...

  8. STS安装Drools

    download drools (including "Drools Engine" & "Drools and jBPM tools") from o ...

  9. Oracle数据库的发展历程

    前言 1970年的6月,IBM 公司的研究员埃德加·考特 (Edgar Frank Codd) 在 Communications of ACM 上发表了那篇著名的<大型共享数据库数据的关系模型& ...

  10. java_第一年_JDBC(7)

    Commons-dbutils是一个开源的JDBC工具类库,对JDBC进行封装,简化编码的工作量,包含的API: org.apache.commons.dbutils.QueryRunner org. ...