description


analysis

  • 考虑\((0,0,0)\)走到某个点\((i,j,k)\)的贡献,相当于插板问题

  • \(i+j\)个空插\(k\)个板可以有空,\(i\)个空插\(j\)个板可以有空,就是\(C^k_{i+j+k}*C^j_{i+j}\)

  • 对于每个障碍,要算出被它包含的障碍走到它的合法方案数少了多少

  • 那么就是拿答案减去走到被包含的障碍的答案乘右上角矩形的贡献


code

#pragma GCC optimize("O3")
#pragma G++ optimize("O3")
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define MAX 300000
#define ha 1000000007
#define ll long long
#define reg register ll
#define fo(i,a,b) for (reg i=a;i<=b;++i)
#define fd(i,a,b) for (reg i=a;i>=b;--i) using namespace std; ll fac[300005],inv[300005];
ll f[305][305][305];
bool bz[305][305][305];
ll n,m; struct node
{
ll x,y,z,ans;
}a[5005]; inline ll read()
{
ll x=0,f=1;char ch=getchar();
while (ch<'0' || '9'<ch){if (ch=='-')f=-1;ch=getchar();}
while ('0'<=ch && ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
inline ll cube(ll x){return x*x%ha*x%ha;}
inline ll pow(ll x,ll y)
{
ll z=1;
while (y){if (y&1)z=z*x%ha;x=x*x%ha,y>>=1;}
return z;
}
inline ll C(ll m,ll n){return fac[n]*inv[n-m]%ha*inv[m]%ha;}
inline ll get(ll i,ll j,ll k){return C(k,i+j+k)*C(j,i+j)%ha;}
inline bool cmp(node a,node b){return a.x<b.x || (a.x==b.x && a.y<b.y) || (a.x==b.x && a.y==b.y && a.z<b.z);}
int main()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
n=read(),m=read();
if (!m)
{
fac[0]=1;fo(i,1,MAX)fac[i]=fac[i-1]*i%ha;
printf("%lld\n",fac[3*n]*pow(cube(fac[n]),ha-2)%ha);
return 0;
}
if (n<=300)
{
memset(bz,1,sizeof(bz)),f[0][0][0]=1;
fo(i,1,m)bz[read()][read()][read()]=0;
fo(i,0,n)fo(j,0,n)fo(k,0,n)
{
if (bz[i+1][j][k])(f[i+1][j][k]+=f[i][j][k])%=ha;
if (bz[i][j+1][k])(f[i][j+1][k]+=f[i][j][k])%=ha;
if (bz[i][j][k+1])(f[i][j][k+1]+=f[i][j][k])%=ha;
}
printf("%lld\n",f[n][n][n]);
return 0;
}
fac[0]=inv[0]=1;fo(i,1,MAX)fac[i]=fac[i-1]*i%ha;
inv[MAX]=pow(fac[MAX],ha-2);fd(i,MAX-1,1)inv[i]=inv[i+1]*(i+1)%ha;
fo(i,1,m)a[i].x=read(),a[i].y=read(),a[i].z=read(),a[i].ans=get(a[i].x,a[i].y,a[i].z);
++m,a[m].x=n,a[m].y=n,a[m].z=n,a[m].ans=get(n,n,n),sort(a+1,a+m+1,cmp);
fo(i,1,m)fo(j,1,i-1)if (a[i].x>=a[j].x && a[i].y>=a[j].y && a[i].z>=a[j].z)
a[i].ans=(a[i].ans-a[j].ans*get(a[i].x-a[j].x,a[i].y-a[j].y,a[i].z-a[j].z)%ha+ha)%ha;
printf("%lld\n",a[m].ans);
return 0;
}

【JZOJ6403】a的更多相关文章

  1. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  2. 【原】谈谈对Objective-C中代理模式的误解

    [原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...

  3. 【原】FMDB源码阅读(三)

    [原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...

  4. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  5. 【调侃】IOC前世今生

    前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...

  6. Python高手之路【三】python基础之函数

    基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...

  7. Python高手之路【一】初识python

    Python简介 1:Python的创始人 Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种解释型.面向对象.动态数据类型的高级程序设计语言,由荷兰人Guido ...

  8. 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】

    说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...

  9. 【原】FMDB源码阅读(二)

    [原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...

随机推荐

  1. 学习记录:@Transactional 事务不生效

    测试时使用spring boot2.2.0,在主类中调用,@Transactional 不起作用,原代码如下: @SpringBootApplication @Slf4j @Component pub ...

  2. 解决VSCode中Python在控制台输出中文乱码的问题

    在菜单Debug->Open Configurations,打开launch.json,新增如下粉红色字符内容: { // Use IntelliSense to learn about pos ...

  3. 分布式锁实现(二):Zookeeper

    目录 前言 设计实现 一.基本算法 二.关键点 临时有序节点 监听 三.代码实现 Curator源码分析 一.基本使用 二.源码分析 后记 前言 紧跟上文的:分布式锁实现(一):Redis ,这篇我们 ...

  4. Kafka速览

    一.基本结构 三台机器组成的Kafka集群,每台机器启动一个Kafka进程,即Broker 向broker发送消息的客户端是Producer,拉取消息的客户端是Consumer Producer和Co ...

  5. springboot集成使用rabbitmq笔记(1.rabbitmq安装)

    使用rabbitmq笔记一 使用rabbitmq笔记二 使用rabbitmq笔记三 1.选择适配的版本,参考---https://www.rabbitmq.com/which-erlang.html ...

  6. Failed to bind properties under '' to com.zaxxer.hikari.Hikari DataSource Spring Boot解决方案

    Description: Failed to bind properties under '' to com.zaxxer.hikari.HikariDataSource: Property: dri ...

  7. 阿里云智能推荐AIRec产品介绍

    一.智能推荐(AIRec)简介 AIRec背景介绍 智能推荐(简称AIRec)基于阿里巴巴集团领先的大数据和人工智能技术,结合阿里巴巴在电商.内容.新闻.视频直播和社交等多个行业领域的积累,为全球企业 ...

  8. 远程仓库 GitHub

    远程仓库 这里介绍的远程仓库指的是 GitHub, 在这个网站,所有非私有的的代码,都可以被其他人查看,所以,一些机密或者重要的文件千万不要上传到这里面,如果需要可以购买付费版本或自己公司搭建埃及的远 ...

  9. 使用pangolin库画出轨迹

    https://github.com/stevenlovegrove/Pangolin cmake_minimum_required(VERSION 2.8) project(chapter3) ) ...

  10. BZOJ 5120: [2017国家集训队测试]无限之环(费用流)

    传送门 解题思路 神仙题.调了一个晚上+半个上午..这道咋看咋都不像图论的题竟然用费用流做,将行+列为奇数的点和偶数的点分开,也就是匹配问题,然后把一个点复制四份,分别代表这个点的上下左右接头,如果有 ...