这个ai<=2000有点意思

启发我们用O(W^2)的算法

FFT不存在,对应关系过紧

考虑组合意义转化建模,再进行分离

(除以2不需要逆元不懂为啥,但是算个逆元总不费事)

由于终点可能在起点的右下,所以,从左上到右下要再做一遍

但是每个终点正上方的起点统计了两次,再减掉即可

(注意大力卡常:

1.s2[i][j]没有,就不用算了

2.f,ans开long long 尽量减少取模

3.组合数用阶乘计算

#include<bits/stdc++.h>
#define il inline
#define reg register int
#define numb (ch^'0')
using namespace std;
typedef long long ll;
il void rd(int &x){
char ch;bool fl=false;
while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);
(fl==true)&&(x=-x);
}
namespace Miracle{
const int N=+;
const int M=+;
const int mod=1e9+;
ll f[N][N];
int s1[N][N],s2[N][N];
int jie[N],inv[N];
int qm(int x,int y){
int ret=;
while(y){
if(y&) ret=(ll)ret*x%mod;
x=(ll)x*x%mod;
y>>=;
}
return ret;
}
ll mo1(ll x){
return x>=4e12?x%mod:x;
}
ll mo2(ll x){
return x>=?x%mod:x;
}
int n;
int C(int n,int m){
return (ll)jie[n]*inv[m]%mod*inv[n-m]%mod;
}
int main(){
rd(n);
int a,b;
jie[]=;
for(reg i=;i<=;++i) jie[i]=(ll)jie[i-]*i%mod;
inv[]=qm(jie[],mod-);
for(reg i=;i>=;--i) inv[i]=(ll)inv[i+]*(i+)%mod;
ll ans=;
for(reg i=;i<=n;++i){
rd(a);rd(b);
int x=a-b+,y=b+;
s1[x][y]++;
x=-a+b+,y=-b+;
s2[x][y]++;
ans=mo2(ans+mod-C(*a,*b));
}
ans%=mod;
/// cout<<ans<<endl;
for(reg i=4000;i>=1;--i){
for(reg j=;j>=;--j){
f[i][j]=mo1(f[i+][j]+f[i][j+]+s1[i][j]);
if(s2[i][j])ans=mo2(ans+(ll)f[i][j]*s2[i][j]);
}
}
ans%=mod;
// cout<<ans<<endl;
for(reg i=;i<=;++i){
for(reg j=;j>=;--j){
f[i][j]=mo1(f[i-][j]+f[i][j+]+s1[i][j]);
ans=s2[i][j]?(ans+(ll)f[i][j]*s2[i][j])%mod:ans;
s1[i][j]+=s1[i][j+];
ans=s2[i][j]?(ans-(ll)s1[i][j]*s2[i][j]+(ll)*mod)%mod:ans;
}
}
ll inv2=5e8+;
ans=ans*inv2%mod;
printf("%lld",ans);
return ;
} }
signed main(){
freopen("3782.in","r",stdin);
freopen("3782.out","w",stdout);
Miracle::main();
return ;
} /*
Author: *Miracle*
Date: 2019/2/8 18:52:17
*/

总结:

核心:转化问题,分离终点和起点

和这个题的最后差分分离思路有异曲同工之处:AGC 018E.Sightseeing Plan——网格路径问题观止

fzyzojP3782 -组合数问题的更多相关文章

  1. AGC 018E.Sightseeing Plan——网格路径问题观止

    原题链接 鸣谢:AGC 018E.Sightseeing Plan(组合 DP) 本蒟蒻认为,本题堪称网格路径问题观止. 因为涵盖了不少网格路径问题的处理方法和思路. 一句话题意: 给你三个矩形. 三 ...

  2. LCM性质 + 组合数 - HDU 5407 CRB and Candies

    CRB and Candies Problem's Link Mean: 给定一个数n,求LCM(C(n,0),C(n,1),C(n,2)...C(n,n))的值,(n<=1e6). analy ...

  3. 计算一维组合数的java实现

    背景很简单,就是从给定的m个不同的元素中选出n个,输出所有的组合情况! 例如:从1到m的自然数中,选择n(n<=m)个数,有多少种选择的组合,将其输出! 本方案的代码实现逻辑是比较成熟的方案: ...

  4. Noip2016提高组 组合数问题problem

    Day2 T1 题目大意 告诉你组合数公式,其中n!=1*2*3*4*5*...*n:意思是从n个物体取出m个物体的方案数 现给定n.m.k,问在所有i(1<=i<=n),所有j(1< ...

  5. C++单元测试 之 gtest -- 组合数计算.

    本文将介绍如何使用gtest进行单元测试. gtest是google单元测试框架.使用非常方便. 首先,下载gtest (有些google项目包含gtest,如 protobuf),复制目录即可使用. ...

  6. NOIP2011多项式系数[快速幂|组合数|逆元]

    题目描述 给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数. 输入输出格式 输入格式: 输入文件名为factor.in. 共一行,包含5 个整数,分别为 a ,b ,k , ...

  7. AC日记——组合数问题 落谷 P2822 noip2016day2T1

    题目描述 组合数表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法.根据组合数的定 义,我们可以给出计算 ...

  8. 【板子】gcd、exgcd、乘法逆元、快速幂、快速乘、筛素数、快速求逆元、组合数

    1.gcd int gcd(int a,int b){ return b?gcd(b,a%b):a; } 2.扩展gcd )extend great common divisor ll exgcd(l ...

  9. 【BZOJ-4591】超能粒子炮·改 数论 + 组合数 + Lucas定理

    4591: [Shoi2015]超能粒子炮·改 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 95  Solved: 33[Submit][Statu ...

随机推荐

  1. Docker 在Windows上的安装

    1. 软件从Docker官网下载,进行安装,安装后,能看到如下界面. 2. 安装后,查看Docker 版 本信息. 3. 配置加速器 (1)选择setting. (2)依次选择,并填写自己的加速器地址 ...

  2. 温习DL之一:梯度的概念

    1.梯度的概念 梯度是一个矢量,表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向变化最快. 在微积分里面,对多元函数的参数求∂偏导数,把求得的各个参数的偏导数以向量的形式写 ...

  3. c++ getline()和get()的区别

    1.方法get(char &)和get(void)提供不跳过空白的单字符输入功能:2.函数get(char * , int , char)和getline(char * , int , cha ...

  4. 笨办法学Python - 习题5: More Variables and Printing

    1.习题 5: 更多的变量和打印 学习目标:了解用户输入方法,明白pthon2和Python3之间的用户输入的区别.了解格式化字符串(format string)的概念,学会如何创建包含变量内容的字符 ...

  5. 记一次centos6升级salt-minion启动失败的问题

    记一次centos6升级salt-minion启动失败的问题 作者:耀耀 blog:https://www.liuyao.me 一.起因 升级Salt-minion后 使用/etc/init.d/sa ...

  6. Linux读书笔记第一、二章

    第一章    Linux内核简介 1.1Unix历史 Unix特点:1.很简洁 2.所有东西都被当成文件对待 3.Unix内核和相关的系统工具软件都是用C语言编写而成 4.进程创建非常迅速 1.2追寻 ...

  7. 2018-2019-20172329 《Java软件结构与数据结构》第九周学习总结

    2018-2019-20172329 <Java软件结构与数据结构>第九周学习总结 教材学习内容总结 <Java软件结构与数据结构>第十五章-图 一.图及无向图 1.图的相关概 ...

  8. CentOS7服务器上搭建Gitlab

    Gitlab如何搭建? 安装gitlab所需要的依赖 sudo yum install curl policycoreutils openssh-server openssh-clients 使ssh ...

  9. beat冲刺(4/7)

    目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(4/7) 团队部分 后敬甲(组长) 过去两天完成了哪些任务 整理博客 ppt模板 接下来的计划 做好机动. ...

  10. HDU 4745 Two Rabbits 区间dp_回文序列

    题目链接: http://blog.csdn.net/scnu_jiechao/article/details/11759333 Two Rabbits Time Limit: 10000/5000 ...