hdu 5852 :Intersection is not allowed! 行列式
有K个棋子在一个大小为N×N的棋盘。一开始,它们都在棋盘的顶端,它们起始的位置是 (1,a1),(1,a2),...,(1,ak) ,它们的目的地是 (n,b1),(n,b2),...,(n,bk)。
一个位于 (r,c) 的棋子每一步只能向右走到 (r,c+1) 或者向下走到 (r+1,c) 。
我们把 i 棋子从 (1,ai) 走到 (n,bi) 的路径记作 pi 。
你的任务是计算有多少种方案把n个棋子送到目的地,并且对于任意两个不同的棋子 i,j ,使得路径 pi 与 pj 不相交(即没有公共点)。
容斥原理。
假设只有两个点,那么答案就是它们以任意路径到达终点的方案数减去相交的方案。
比如 a1->b1 ,a2->b2 ,那它们相交的方案就是 a1->b2,a2->b1的所有方案。
因为在最后一个交点下把两条路径换一下它们是一一对应的。
扩展到多个点时有$n!$种向下对应对应的方案,每个方案的容斥系数是$-1^{逆序对个数}$。
实际上这东西就是矩阵的行列式。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
#define N 105
using namespace std;
int n,k;
const int inf = ;
const int p = ;
int jie[],ni[];
void yu()
{
jie[]=ni[]=ni[]=;
for(int i=;i<=inf;i++)jie[i]=1LL*i*jie[i-]%p;
for(int i=;i<=inf;i++)ni[i]=(1LL*(-p/i)*ni[p%i]%p+p)%p;
for(int i=;i<=inf;i++)ni[i]=1LL*ni[i-]*ni[i]%p;
}
int pw(ll x,int y)
{
ll lst=;
while(y)
{
if(y&)lst=lst*x%p;
y>>=;
x=1LL*x*x%p;
}
return (int)lst;
}
int c(int n,int m)
{
return 1LL*jie[n]*ni[m]%p*ni[n-m]%p;
}
int st[N],ed[N];
ll a[N][N];
void guess()
{
ll ans=;
for(int i=;i<=k;i++)
{
for(int j=i;j<=k;j++)
{
if(a[j][i])
{
if(j!=i)ans*=-;
for(int l=;l<=k;l++)swap(a[i][l],a[j][l]);
break;
}
}
ll tp=pw(a[i][i],p-);
for(int j=i+;j<=k;j++)
{
if(a[j][i])
{
ll tmp=p-tp*a[j][i]%p;
for(int l=i;l<=k;l++)
{
a[j][l]=(a[j][l]+tmp*a[i][l]%p)%p;
}
}
}
}
if(ans==-)ans=p-;
for(int i=;i<=k;i++)ans=ans*a[i][i]%p;
printf("%lld\n",ans);
return ;
}
int main()
{
yu();
scanf("%d%d",&n,&k);
for(int i=;i<=k;i++)scanf("%d",&st[i]);
for(int i=;i<=k;i++)scanf("%d",&ed[i]);
for(int i=;i<=k;i++)
{
for(int j=;j<=k;j++)
{
if(ed[j]>=st[i])a[i][j]=c(n-+abs(ed[j]-st[i]),n-);
}
}
guess();
return ;
}
hdu 5852 :Intersection is not allowed! 行列式的更多相关文章
- HDU 5852 Intersection is not allowed!(LGV定理行列式求组合数)题解
题意:有K个棋子在一个大小为N×N的棋盘.一开始,它们都在棋盘的顶端,它们起始的位置是 (1,a1),(1,a2),...,(1,ak) ,它们的目的地是 (n,b1),(n,b2),...,(n,b ...
- HDU 5852 Intersection is not allowed! ( 2016多校9、不相交路径的方案、LGV定理、行列式计算 )
题目链接 题意 : 给定方格中第一行的各个起点.再给定最后一行与起点相对应的终点.问你从这些起点出发到各自的终点.不相交的路径有多少条.移动方向只能向下或向右 分析 : 首先对于多起点和多终点的不相交 ...
- hdu5852 Intersection is not allowed! 【矩阵行列式】
题意 给出\(n*n\)网格\((n<=10^5)\) 顶部有\(K\)个起点,底部有\(K\)个相对应的终点 每次只能向下或向右走 求有多少种从各个起点出发到达对应终点且路径不相交的路径? 对 ...
- hdu 5120 Intersection
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5120 A ring is a 2-D figure bounded by two circles sh ...
- hdu 5120 Intersection 圆环面积交
Intersection Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5 ...
- HDU 5120 Intersection(2014北京赛区现场赛I题 计算几何)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5120 解题报告:给你两个完全相同的圆环,要你求这两个圆环相交的部分面积是多少? 题意看了好久没懂.圆环 ...
- 计算几何(容斥原理,圆交):HDU 5120 Intersection
Matt is a big fan of logo design. Recently he falls in love with logo made up by rings. The followin ...
- hdu 5120 Intersection 两个圆的面积交
Intersection Time Limit: 4000/4000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others) P ...
- HDU5852 Intersection is not allowed!
There are K pieces on the chessboard. The size of the chessboard is N*N. The pieces are initially pl ...
随机推荐
- 分享一篇IBN(Intent-based networking)调研报告
IBN调研报告 背景 SDN(Software-defined network):最大特点在于具有松耦合的控制平面与数据平面.支持集中化的网络状态控制.实现底层网络设施对上层应用的透明.具有灵活的软件 ...
- python - 定时清理ES 索引
只保留三天 #!/usr/bin/env python3 # -*- coding:utf-8 -*- import os import datetime # 时间转化为字符串 now_time = ...
- Docker入门与实践之 Dockerfile 语法详解
一.Dockerfile 概述 Dockerfile是docker程序的解释脚本文件,Dockerfile 是一条一条的指令,Docker程序将dockerfile中的一条条指令编译成Linux可执行 ...
- 时间戳使用的bug,你见过么
博主本人前几天给公司项目里写了个禁言和解除禁言的功能,项目中涉及到对时间的处理,因为学得时候也没很注意,就按自己的思路去写了,运行起来发现了一个天大的bug,就是写的延后一年尽然,刚开始就执行了,而且 ...
- 更换 CentOS 7 的下载源为阿里云
http://blog.csdn.net/realghost/article/details/45949759
- Scrum立会报告+燃尽图(Final阶段第五次)
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2484 项目地址:https://coding.net/u/wuyy694 ...
- Bing词典vs有道词典比对测试报告——功能篇之辅助功能,差异化功能及软件的效能
1.辅助功能: 和有道相比,必应的词典加入了换肤功能,用户可以选择喜欢的颜色,而且必应的皮肤也比较多,这一点设计给必应增色不少. 相对而言,有道则加入了调节客户端字体的大小,如下,也比较人性化 2.差 ...
- 团队项目之开题scrum meeting
scrum meeting 会议记 一.会议要点: 1.确定成员角色: 2.讨论关于项目的疑问: 3.制定一周内成员任务. 二.具体会议内容: 1.成员角色: PM:杨伊 Dev:徐钧鸿 刘浩然 张艺 ...
- 20172322 实验一《Java开发环境的熟悉》实验报告
172322 2017-2018-2 <程序设计与数据结构>实验一报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 张昊然 学号:20172322 实验教师:王志强 ...
- java读取properties文件的几种方法
一.项目中经常会需要读取配置文件(properties文件),因此读取方法总结如下: 1.通过java.util.Properties读取 Properties p=new Properties(); ...