有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! 行列式的更多相关文章

  1. HDU 5852 Intersection is not allowed!(LGV定理行列式求组合数)题解

    题意:有K个棋子在一个大小为N×N的棋盘.一开始,它们都在棋盘的顶端,它们起始的位置是 (1,a1),(1,a2),...,(1,ak) ,它们的目的地是 (n,b1),(n,b2),...,(n,b ...

  2. HDU 5852 Intersection is not allowed! ( 2016多校9、不相交路径的方案、LGV定理、行列式计算 )

    题目链接 题意 : 给定方格中第一行的各个起点.再给定最后一行与起点相对应的终点.问你从这些起点出发到各自的终点.不相交的路径有多少条.移动方向只能向下或向右 分析 : 首先对于多起点和多终点的不相交 ...

  3. hdu5852 Intersection is not allowed! 【矩阵行列式】

    题意 给出\(n*n\)网格\((n<=10^5)\) 顶部有\(K\)个起点,底部有\(K\)个相对应的终点 每次只能向下或向右走 求有多少种从各个起点出发到达对应终点且路径不相交的路径? 对 ...

  4. hdu 5120 Intersection

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5120 A ring is a 2-D figure bounded by two circles sh ...

  5. hdu 5120 Intersection 圆环面积交

    Intersection Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5 ...

  6. HDU 5120 Intersection(2014北京赛区现场赛I题 计算几何)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5120 解题报告:给你两个完全相同的圆环,要你求这两个圆环相交的部分面积是多少? 题意看了好久没懂.圆环 ...

  7. 计算几何(容斥原理,圆交):HDU 5120 Intersection

    Matt is a big fan of logo design. Recently he falls in love with logo made up by rings. The followin ...

  8. hdu 5120 Intersection 两个圆的面积交

    Intersection Time Limit: 4000/4000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others) P ...

  9. 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 ...

随机推荐

  1. python - 定时清理ES 索引

    只保留三天 #!/usr/bin/env python3 # -*- coding:utf-8 -*- import os import datetime # 时间转化为字符串 now_time = ...

  2. 05-matplotlib-直方图

    import numpy as np import matplotlib.pyplot as plt ''' 由于一系列不等的纵形图组成,表示数据分布的情况 例如:某年级同学的身高分布 需要注意与 柱 ...

  3. Python数据分析工具库-Numpy 数组支持库(一)

    1 Numpy数组 在Python中有类似数组功能的数据结构,比如list,但在数据量大时,list的运行速度便不尽如意,Numpy(Numerical Python)提供了真正的数组功能,以及对数据 ...

  4. Spring自定义标签解析与实现

           在Spring Bean注册解析(一)和Spring Bean注册解析(二)中我们讲到,Spring在解析xml文件中的标签的时候会区分当前的标签是四种基本标签(import.alias ...

  5. Daily Scrum 11.10

    今日完成任务: 1.加入更改头像功能 2.解决不发送激活邮件和重置密码邮件的问题 3.在服务器上部署网站 4.加入匿名提问功能 明日任务: 黎柱金 修改数据库用户表,实现用户积分管理功能 晏旭瑞 解决 ...

  6. learning of a previous team

     作为一个软件工程团队,离不开下面三个要素:支持,即分享.责任和合作. 分享是出色技术团队的另一个关键要素,它是团队的基石之一.只有通过分享,团队才有可能实现1+1 > 2这种效应,分享也是让团 ...

  7. No.111_第四次团队会议

    后端的偏执 啊,这次又轮到我写团队博客了. 此时又是深夜,窗外漫天繁星.舍友的呼噜声惊吓了月亮,它害羞地跑回了云里去. 我关上灯拔掉机械,悄悄拿着电脑上了床,写这次的团队博客.曾经觉得自己绝对不会晚睡 ...

  8. 团队作业2 <嗨,你的快递!>需求分析与原型设计

    哦,不,是你的快速(*_*) 第一部分 需求分析 1.1 用户调研 1.1.1调研对象:由于我们的系统是校园快递代取业务,面向的是大学生活,所以本次调研范围都是在校大学生(除了师大学生,也包括了外校的 ...

  9. WebGL学习笔记(二)

    目录 绘制多个顶点 使用缓冲区对象 类型化数组 使用drawArrays()函数绘制图形 图形的移动 图形的旋转 图形的缩放 绘制多个顶点 使用缓冲区对象 创建缓冲区对象 var vertexBuff ...

  10. CANOpen学习指南

    对于初学者,相对于其他总线的资料来说,在国内CANOpen的资料并不多.而且并不是所有资料都适合初学者看的.这里给出一些建议,对CANOpen感兴趣的,可以参考一下学习的顺序. 前提:需要对CAN总线 ...