【GDOI2014模拟】JZOJ2020年8月14日T2 网格

题目

Time and Memory Limits

Description

某城市的街道呈网格状,左下角坐标为A(0, 0),右上角坐标为B(n, m),其中n >= m。现在从A(0, 0)点出发,只能沿着街道向正右方或者正上方行走,且不能经过图示中直线左上方的点,即任何途径的点(x, y)都要满足x >= y,请问在这些前提下,到达B(n, m)有多少种走法。

Input

输入文件中仅有一行,包含两个整数n和m,表示城市街区的规模。

Output

输出文件中仅有一个整数和一个换行/回车符,表示不同的方案总数。

Sample Input

输入1:

6 6

输入2:

5 3

Sample Output

输出1:

132

输出2:

28

Data Constraint

50%的数据中,n = m,在另外的50%数据中,有30%的数据:1 <= m < n <= 100

100%的数据中,1 <= m <= n <= 5 000

题解

题意

给出一个笛卡尔坐标系

问在满足任何途径的点\((x,y)\)都满足\(x≥y\)的情况下,从\((0,0)\)走到\((n,m)\)有多少种走法

分析

注意到\(n,m\)都是5000的,而且空间很小

普通的\(n*m\)暴力\(DP\)不可以

发现有个要求

找规律发现

\[Ans=C_{n+m}^m-C_{n+m}^{m-1}
\]

那么高精度安排即可

但是又要打减、乘、除,十分麻烦

尝试化简

设\(a=n+m\),\(b=m\)

\[Ans=C_{n+m}^m-C_{n+m}^{m-1}\\=C_a^b-c_a^{b-1}\\=\dfrac{a!}{b!(a-b)!}-\dfrac{a!}{(b-1)!(a-b+1)!}\\=\dfrac{a!(a-b+1)}{b!(a-b+1)!}-\dfrac{a!b}{b!(a-b+1)!}\\=\dfrac{a!(a-2b+1)}{b!(a-b+1)!}\\=\dfrac{(n+m)!(n-m+1)}{m!(n+1)!}
\]

那么就可以质因数分解然后相乘即可

Code

#include<bits/stdc++.h>
#define rg register
using namespace std;
long long n,m,x,tot[100005],ans[1000005];
bool b[100005];
inline long long read()
{
long long res=0;char ch;
ch=getchar();
while (ch<'0'||ch>'9') ch=getchar();
while (ch>='0'&&ch<='9')
{
res=(res<<1)+(res<<3)+(ch-'0');
ch=getchar();
}
return res;
}
int main()
{
n=read();m=read();
memset(b,true,sizeof(b));
b[1]=false;
for (rg long long i=2;i<=100005;i++)
for (rg long long j=2;j*i<=100005;j++)
b[i*j]=false;
x=n+1-m;
for (rg long long i=2;i*i<=x;i++)
{
if (b[i]==true&&x%i==0)
{
while (x%i==0)
{
tot[i]++;
x/=i;
}
}
}
if (x>1) tot[x]++;
for (rg long long j=2;j<=n+m;j++)
{
long long k=j;
for (rg long long i=2;i*i<=k;i++)
{
if (b[i]==true&&k%i==0)
{
while (k%i==0)
{
tot[i]++;
k/=i;
}
}
}
if (k>1) tot[k]++;
}
for (rg long long j=2;j<=m;j++)
{
long long k=j;
for (rg long long i=2;i*i<=k;i++)
{
if (b[i]==true&&k%i==0)
{
while (k%i==0)
{
tot[i]--;
k/=i;
}
}
}
if (k>1) tot[k]--;
}
for (rg long long j=2;j<=n+1;j++)
{
long long k=j;
for (rg long long i=2;i*i<=k;i++)
{
if (b[i]==true&&k%i==0)
{
while (k%i==0)
{
tot[i]--;
k/=i;
}
}
}
if (k>1) tot[k]--;
}
ans[0]=1;
ans[1]=1;
for (rg long long i=1;i<=100000;i++)
{
if (b[i]==true&&tot[i]>0)
{
for (rg long long j=1;j<=tot[i];j++)
{
for (rg long long k=1;k<=ans[0];k++)
ans[k]*=i;
x=0;
for (rg long long k=1;k<=ans[0];k++)
{
ans[k]+=x;
x=ans[k]/10;
ans[k]%=10;
}
ans[ans[0]+1]=x;
while (ans[ans[0]+1])
{
ans[0]++;
ans[ans[0]+1]=ans[ans[0]]/10;
ans[ans[0]]%=10;
}
}
}
}
for (rg long long i=ans[0];i>=1;i--)
printf("%lld",ans[i]);
return 0;
}

【GDOI2014模拟】JZOJ2020年8月14日T2 网格的更多相关文章

  1. 【GDOI2014模拟】JZOJ2020年8月14日提高组 服务器

    [GDOI2014模拟]JZOJ2020年8月14日提高组 服务器 题目 Time and Memory Limits Description 我们需要将一个文件复制到n个服务器上,这些服务器的编号为 ...

  2. JZOJ2020年8月14日提高组反思

    JZOJ2020年8月14日提高组反思 T1 看到题 一脸:我是谁,我在哪,我要干啥 看到字符串凉一半 还有查询修改 想到线段树但不会建模 暴力安排 T2 一开始觉得:水题 然后啪啪打脸 空间小,数据 ...

  3. 【NOIP2012模拟8.7】JZOJ2020年8月8日提高组T1 奶牛编号

    [NOIP2012模拟8.7]JZOJ2020年8月8日提高组T1 奶牛编号 题目 作为一个神秘的电脑高手,Farmer John 用二进制数字标识他的奶牛. 然而,他有点迷信,标识奶牛用的二进制数字 ...

  4. 【NOIP2015模拟11.4】JZOJ2020年8月6日提高组T2 最优交换

    [NOIP2015模拟11.4]JZOJ2020年8月6日提高组T2 最优交换 题目 题解 题意 有一个长度为\(n\)的正整数 最多可以进行\(k\)次操作 每次操作交换相邻两个位置上的数 问可以得 ...

  5. 5月14日 绿城育华NOIP巨石杯试卷解析

    [题外话] 感谢UBUNTU为保存程序做出贡献:https://paste.ubuntu.com : 感谢洛谷OJ的私人题库保存题面:https://www.luogu.org : 现在我的题解的所有 ...

  6. 【SHOI2008】JZOJ2020年9月5日提高组 循环的债务

    CSP-2020倒计时:36天 [SHOI2008]JZOJ2020年9月5日提高组 循环的债务 题目 Description Alice.Bob和Cynthia总是为他们之间混乱的债务而烦恼,终于有 ...

  7. JZOJ2020年9月5日提高组反思

    JZOJ2020年9月5日提高组反思 T1 考试的时候没有头绪,就打了个暴力,愉快的拿到了10分的\(impossible\) 正解是\(DP\),设\(f[i][j][k]\)表示地\(i\)种币值 ...

  8. 【GDOI2007】JZOJ2020年8月10日提高组T1 夏娜的菠萝包

    [GDOI2007]JZOJ2020年8月10日提高组T1 夏娜的菠萝包 题目 Description 夏娜很喜欢吃菠萝包,她的经纪人RC每半个月就要为她安排接下来的菠萝包计划.今天是7月份,RC又要 ...

  9. JZOJ2020年8月7日提高组反思

    JZOJ2020年8月7日提高组反思 T1 暴力枚举 枚举起点和\(p\) 然后就 过了?! 根据本人不严谨的推算 时间复杂度\(O(\dfrac{n^7}{4})\) 数据太水就过去了QAQ T2 ...

随机推荐

  1. [Luogu P2014]选课 (树形DP)

    题面 传送门:https://www.luogu.org/problemnew/show/P2014 Solution 这是一道十分经典的树形DP题,这种类型的树形DP有一种很普遍的解法. 首先,观察 ...

  2. FloodFill算法详解及应用

    啥是 FloodFill 算法呢,最直接的一个应用就是「颜色填充」,就是 Windows 绘画本中那个小油漆桶的标志,可以把一块被圈起来的区域全部染色. 这种算法思想还在许多其他地方有应用.比如说扫雷 ...

  3. Python 列表的11个重要操作

    列表是python中内置的数据结构,它的表现形式为方括号中不同数据的集合,用逗号分隔开.列表可以用来存储相同数据类型或不同数据类型. 列表是可变的,这也是它如此常用的原因,然而在某些情况下,可变性需要 ...

  4. DP斜率优化学习笔记

    斜率优化 首先,可以进行斜率优化的DP方程式一般式为$dp[i]=\max_{j=1}^{i-1}/\min_{j=1}^{i-1}\{a(i)*x(j)+b(i)*y(j)\}$ 其中$a(j)$和 ...

  5. 【SpringBoot】11-1.Springboot整合Springmvc+Mybatis增删改查操作(下)

    整合过程:https://www.isdxh.com/68.html 一.增--增加用户 1.创建实体类 package com.dxh.pojo; public class Users { priv ...

  6. 最全总结 | 聊聊 Python 办公自动化之 Excel(中)

    1. 前言 上一篇文章中,我们聊到使用 xlrd.xlwt.xlutils 这一组合操作 Excel 的方法 最全总结 | 聊聊 Python 办公自动化之 Excel(上) ​本篇文章将继续聊另外一 ...

  7. Java 最佳命名规则记录

    类名:使用双驼峰规则.如 TestService 包名:命名全小写,且使用小写 如使用 web.csvdata.util 而不是 web.csvData.util 或 web.csvdata.util ...

  8. DateUtil-1

    /** * @Title: DateUtil.java * @Package com.jd.big.data.dao.dashboard.util * @Description: 日期工具 * @au ...

  9. CSS3之线性渐变(linear gradients)

    线性渐变(linear gradients)沿着一根轴线改变颜色,从起点到终点颜色进行顺序渐变. 语法: background:linear-gradient(direction,color-stop ...

  10. Java泛型中<?> 和 <? extends Object>的异同分析

    相信很多人和我一样,接触Java多年,却仍旧搞不清楚 Java 泛型中 <?>和 <? extends Object>的相似和不同.但是,这应该是一个比较高端大气上档次的Que ...