当前位置: 首页 > news >正文

BZOJ 4767: 两双手 [DP 组合数]

传送门

题意:

给你平面上两个向量,走到指定点,一些点不能经过,求方案数


 

煞笔提一开始被题面带偏了一直郁闷为什么方案不是无限

现在精简的题意.....不就是$bzoj3782$原题嘛,还不需要$Lucas$了....

因为这是平面向量啊

基本定理与唯一表示.....

小新上课强调了辣么多次......

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N=505,M=1e6,P=1e9+7;
inline int read(){
    char c=getchar();int x=0,f=1;
    while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    return x*f;
}
int x,y,n,x1,y1,x2,y2;
struct Point{
    int x,y;
    bool operator <(const Point &r)const{return x<r.x || (x==r.x && y<r.y);}
}a[N];
int m;
bool solEqu(int x,int y,Point &p){//printf("solEqu %d %d\n",x,y);
    int a=x*y1-y*x1,b=x2*y1-y2*x1;//printf("a b %d %d\n",a,b);
    if(a%b) return 0;else p.x=a/b;
    a=x*y2-y*x2,b=x1*y2-y1*x2;//printf("a b %d %d\n",a,b);
    if(a%b) return 0;else p.y=a/b;//printf("Point %d %d\n",p.x,p.y);
    return 1;
}
ll inv[M],fac[M],facInv[M];
void ini(int n){
    inv[1]=1;fac[0]=facInv[0]=1;
    for(int i=1;i<=n;i++){
        if(i!=1) inv[i]=(P-P/i)*inv[P%i]%P;
        fac[i]=fac[i-1]*i%P;
        facInv[i]=facInv[i-1]*inv[i]%P;
    }
}
inline ll C(int n,int m){return fac[n]*facInv[m]%P*facInv[n-m]%P;}
ll f[N];
inline void modify(ll &x){if(x<0) x+=P;}
void dp(){
    for(int i=1;i<=m;i++){
        f[i]=C(a[i].x+a[i].y,a[i].x);
        for(int j=1;j<i;j++) if(a[j].x<=a[i].x && a[j].y<=a[i].y)
            modify(f[i]-=C(a[i].x-a[j].x+a[i].y-a[j].y , a[i].x-a[j].x) * f[j] %P);
    }
}
int main(){
    freopen("in","r",stdin);
    ini(500000);
    x=read();y=read();n=read();
    x1=read();y1=read();x2=read();y2=read();
    if(!solEqu(x,y,a[++m])) {puts("0");return 0;}
    for(int i=1;i<=n;i++){
        x=read();y=read();
        if(!solEqu(x,y,a[++m]) || a[m].x>a[1].x || a[m].y>a[1].y) m--;
    }
    sort(a+1,a+1+m);
    dp();
    printf("%lld",f[m]);
}

 

相关文章:

  • linux 调试 之printf
  • 普通函数和构造函数的区别
  • jwplayer 隐藏属性方法记载
  • hadoop2.7.3 HA高可用集群安装
  • lcx转发
  • 分布式数据库
  • github指令
  • Mysql 死锁
  • Centos Svn 仓库部署
  • 编码规范
  • Java数据结构之Set学习总结
  • 调用PostgreSQL存储过程,找不到函数名的问题
  • CAP理论
  • HDU 2501 Tiling_easy version
  • 透明代理Transparent Proxy
  • Centos6.8 使用rpm安装mysql5.7
  • HomeBrew常规使用教程
  • input实现文字超出省略号功能
  • Java编程基础24——递归练习
  • java中具有继承关系的类及其对象初始化顺序
  • js如何打印object对象
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • magento2项目上线注意事项
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 关于 Cirru Editor 存储格式
  • 跨域
  • 排序算法之--选择排序
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 消息队列系列二(IOT中消息队列的应用)
  • 小程序button引导用户授权
  • Linux权限管理(week1_day5)--技术流ken
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • # 安徽锐锋科技IDMS系统简介
  • #QT(一种朴素的计算器实现方法)
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • #图像处理
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • .htaccess 强制https 单独排除某个目录
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .net 获取url的方法
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .NET委托:一个关于C#的睡前故事
  • /proc/vmstat 详解
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48