【BZOJ4563】[Haoi2016]放棋子 错排+高精度
【BZOJ4563】[Haoi2016]放棋子
Description
Input
Output
Sample Input
0 1
1 0
Sample Output
题解:傻题。
其实只需要读入n就行。因为障碍矩阵可以看成是一个1到n的排列,最后防棋子的位置也可以看成一个1到n的排列。所以答案就是错排的方案数。只需套用错排的经典公式:f[i]=(i-1)*(f[i-1]+f[i-2])。
然而答案不取模,所以用高精度即可。
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int n;
struct node
{
int l,v[110];
node() {memset(v,0,sizeof(v)),l=1;}
node operator + (const node &a) const
{
node b;
b.l=max(l,a.l);
for(int i=1;i<=b.l;i++) b.v[i]+=v[i]+a.v[i],b.v[i+1]=b.v[i]/1000,b.v[i]%=1000;
if(b.v[b.l+1]) b.l++;
return b;
}
node operator * (const int &a) const
{
node b;
b.l=l;
for(int i=1;i<=l;i++) b.v[i]+=v[i]*a,b.v[i+1]=b.v[i]/1000,b.v[i]%=1000;
if(b.v[b.l+1]) b.l++;
return b;
}
}a,b,c;
int main()
{
scanf("%d",&n);
if(!n)
{
printf("0");
return 0;
}
int i;
a.l=b.l=a.v[1]=1;
for(i=1;i<n;i++) c=a,a=b,b=(c+b)*i;
printf("%d",b.v[b.l]);
for(i=b.l-1;i;i--) printf("%03d",b.v[i]);
return 0;
}
【BZOJ4563】[Haoi2016]放棋子 错排+高精度的更多相关文章
- bzoj4563: [Haoi2016]放棋子(错排+高精)
4563: [Haoi2016]放棋子 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 387 Solved: 247[Submit][Status] ...
- JZYZOJ1544 [haoi2016T2]放棋子 错排公式 组合数学 高精度
http://172.20.6.3/Problem_Show.asp?ID=1544&a=ProbNF 看了题解才意识到原题有错排的性质(开始根本不知道错排是什么). 十本不同的书放在书架上. ...
- BZOJ4563 HAOI2016放棋子(高精度)
没看清题还以为是要求数最大匹配数量……注意到任意障碍不在同一行同一列,且恰好有n个障碍,不妨通过交换列使得第i行第i列均有障碍.那么就是个错排了.居然wa了一发简直没救. #include<io ...
- BZOJ4563: [Haoi2016]放棋子
Description 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在 这个矩阵上放N枚棋子(障碍的位置不能放棋子),要求你放N个棋子也满足每行 ...
- [Haoi2016]放棋子 题解
4563: [Haoi2016]放棋子 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 440 Solved: 285[Submit][Status] ...
- 洛谷P3182 [HAOI2016]放棋子
P3182 [HAOI2016]放棋子 题目描述 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在这个矩阵上放N枚棋子(障碍的位置不能放棋子),要 ...
- 洛谷 P3182 [HAOI2016]放棋子(高精度,错排问题)
传送门 解题思路 不会错排问题的请移步——错排问题 && 洛谷 P1595 信封问题 这一道题其实就是求对于每一行的每一个棋子都放在没有障碍的地方的方案数. 因为障碍是每行.每列只有一 ...
- [HAOI2016] 放棋子及错排问题
题目 Description 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在这个矩阵上放N枚棋子(障碍的位置不能放棋子),要求你放N个棋子也满足 ...
- 洛谷 P3182 [HAOI2016]放棋子(错排问题)
题面 luogu 题解 裸的错排问题 错排问题 百度百科:\(n\)个有序的元素应有\(n!\)个不同的排列,如若一个排列使得所有的元素不在原来的位置上,则称这个排列为错排:有的叫重排.如,1 2的错 ...
随机推荐
- 点滴积累【C#】---抓取页面中想要的数据
效果: 描述:此功能是抓取外国的一个检测PM2.5的网站.实时读取网站的数据,然后保存到数据库里面.每隔一小时刷新一次. 地址为:http://beijing.usembassy-china.org. ...
- 彻底清除Linux centos minerd木马 实战 跟redis的设置有关
top -c把cpu占用最多的进程找出来: Tasks: total, running, sleeping, stopped, zombie Cpu(s): 72.2%us, 5.9%sy, 0.0% ...
- bazel-编译一个源文件生成可执行程序
demo1 使用bazel编译一个源文件生成可执行程序简单示例 demo1目录树 demo1 ├── app │ ├── BUILD │ └── hello_world.cpp ├── README. ...
- 李洪强iOS开发之数据存储
李洪强iOS开发之数据存储 iOS应用数据存储的常用方式 1.lXML属性列表(plist)归档 2.lPreference(偏好设置) 3.lNSKeyedArchiver归档(NSCoding) ...
- dubbo接口测试
1.下载所需工具eclipse或intellij idea,下载maven,maven中config/settings.xml中要添加公司(测试人员公司)的maven库,不然被测dubbo服务jar包 ...
- Python 将json字符串 进行列表化可循环
import json data = [{1:':'d'}] json.loads(datas))
- Python处理文件以及文件夹常用方法
1.创建文件并且写入 2.多行读取文件的方式 readlines() 3.一次读取全部内容 4.文件的删除 5.shutil 模块实现文件的复制 6.文件的重命名 7.获取文件的后缀名 8.pytho ...
- django 将model转换为字典
from django.forms.models import model_to_dict from projects.models import ProjectInformation site = ...
- linux查看匹配内容的前后几行(转)
linux系统中,利用grep打印匹配的上下几行 如果在只是想匹配模式的上下几行,grep可以实现. $grep -5 'parttern' inputfile //打印匹配行的前后5行 ...
- js 開始时间,当前时间,结束时间的比較
//開始时间不能小于当前时间 function startTimeIsBigThanTotay(startTime){ var startdate = new Date((startTime).rep ...