fzyzojP3782 -组合数问题
这个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 -组合数问题的更多相关文章
- AGC 018E.Sightseeing Plan——网格路径问题观止
原题链接 鸣谢:AGC 018E.Sightseeing Plan(组合 DP) 本蒟蒻认为,本题堪称网格路径问题观止. 因为涵盖了不少网格路径问题的处理方法和思路. 一句话题意: 给你三个矩形. 三 ...
- 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 ...
- 计算一维组合数的java实现
背景很简单,就是从给定的m个不同的元素中选出n个,输出所有的组合情况! 例如:从1到m的自然数中,选择n(n<=m)个数,有多少种选择的组合,将其输出! 本方案的代码实现逻辑是比较成熟的方案: ...
- Noip2016提高组 组合数问题problem
Day2 T1 题目大意 告诉你组合数公式,其中n!=1*2*3*4*5*...*n:意思是从n个物体取出m个物体的方案数 现给定n.m.k,问在所有i(1<=i<=n),所有j(1< ...
- C++单元测试 之 gtest -- 组合数计算.
本文将介绍如何使用gtest进行单元测试. gtest是google单元测试框架.使用非常方便. 首先,下载gtest (有些google项目包含gtest,如 protobuf),复制目录即可使用. ...
- NOIP2011多项式系数[快速幂|组合数|逆元]
题目描述 给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数. 输入输出格式 输入格式: 输入文件名为factor.in. 共一行,包含5 个整数,分别为 a ,b ,k , ...
- AC日记——组合数问题 落谷 P2822 noip2016day2T1
题目描述 组合数表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法.根据组合数的定 义,我们可以给出计算 ...
- 【板子】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 ...
- 【BZOJ-4591】超能粒子炮·改 数论 + 组合数 + Lucas定理
4591: [Shoi2015]超能粒子炮·改 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 95 Solved: 33[Submit][Statu ...
随机推荐
- leetcode第217.题存在重复元素
1.题目描述 给定一个整数数组,判断是否存在重复元素. 如果任何值在数组中出现至少两次,函数返回 true.如果数组中每个元素都不相同,则返回 false. 2.示例 2.1 输入: [1,2,3,1 ...
- Swagger本地环境配置
一.技术背景 随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染.先后端分离的形态,而且前端技术和后端技术在各自的道路上越走越远.而前后端的唯一联系便是 API 接口,与此同 ...
- 什么是mvc模式
MVC是一个架构,或者说是一个设计模式,它就是强制性使应用程序的输入,处理和输出分开.将一个应用程序分为三个部分:Model,View,Controller. 原理图: 分析: Model 模型(完成 ...
- ltrace命令详解
原文链接:https://ipcmen.com/ltrace 用来跟踪进程调用库函数的情况 补充说明 NAME ltrace - A library call tracer ltrace命 ...
- 基于NABCD评论作业-王者荣耀交流协会PSP DAILY
一.根据(不限于)NABCD评论作品的选题 N(Need,需求):在我知道PSP DAILY这款软件的时候,就认为这款软件对于学习软件工程课的学生来说有很大的需要.对于需求来说,软件工程课程中的学 ...
- 10.29 scrum meeting newbe软件团队工作分配
这次会议,我们主要讨论了目前阶段的主要任务与任务分配问题. 首先,通读代码,理解程序的运行方式是必不可少的环节.所以我们要求团队的所有成员通读代码.并且对于开发人员和测试人员,要求写出我们分配的各自模 ...
- OO前三次作业简单总结
随着几周的进行,OO课堂已经经历过三次课下作业.在这三次作业中,我被扣了一些分数,也发现了自己几次作业中一些存在的共同的问题. 首先以第三次作业为例分析,我程序的类图如下 一共九个类,其中Als_sc ...
- Internet History, Technology and Security (Week5.1)
Week5 The Transport layer is built on the Internetwork layer and is what makes our network connectio ...
- 404 Note Found Team's First Blood
团队构成: 队员学号姓名队长标注: 031602114--胡绪佩(队长) 031602113--何宇恒 081600410--胡青元 031602627--刘恺琳 031602525--刘一好 031 ...
- 实现二叉树(search)
★实验任务 可怜的 Bibi 刚刚回到家,就发现自己的手机丢了,现在他决定回头去搜索 自己的手机. 现在我们假设 Bibi 的家位于一棵二叉树的根部.在 Bibi 的心中,每个节点 都有一个权值 x, ...