【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. git/SQL/正则表达式的在线练习网站

    虽说我没事就喜欢喷应试教育,但我也从应试教育中发现了一个窍门:如果能够以刷题的形式学习某项技能,效率和效果是最佳的.对于技术的学习,我经常面临的困境是,理论知识知道的不少,但是有的场景实在无法模拟,缺 ...

  2. 【洛谷】P1009 阶乘之和——高精度算法

    题目描述 用高精度计算出S = 1! + 2! + 3! + - + n!  ( n ≤  50 ) S = 1! + 2! + 3! + - + n! ( n ≤ 50 ) 其中"!&qu ...

  3. 推荐系统,深度论文剖析GBDT+LR

    今天我们来剖析一篇经典的论文:Practial Lessons from Predicting Clicks on Ads at Facebook.从这篇paper的名称当中我们可以看得出来,这篇pa ...

  4. ner处理数据的方式

    ner处理数据的方式biodef load_data(filename): features = [] labels = [] f = open(filename, encoding='utf-8') ...

  5. Java安全之JNDI注入

    Java安全之JNDI注入 文章首发:Java安全之JNDI注入 0x00 前言 续上篇文内容,接着来学习JNDI注入相关知识.JNDI注入是Fastjson反序列化漏洞中的攻击手法之一. 0x01 ...

  6. Javascript的运行效率是原生代码的20%-30%

    所以jser们,写代码更仔细些吧. http://www.cnblogs.com/codemood/p/3213459.html

  7. epoll内核源码详解(转 作者:赛罗·奥特曼 来源:牛客网)

    发现自己发的一篇面经后,很多小伙伴向我索要epoll的内核源码实现,那我就在牛客网发下这源码还有自己总结的流程. 另外 网上很多博客说epoll使用了共享内存,这个是完全错误的 ,可以阅读源码,会发现 ...

  8. 线程队列分享ppt

  9. leetcode 30day--2

    202. Happy Number Write an algorithm to determine if a number n is "happy". A happy number ...

  10. 适合 Go 新手学习的开源项目——在 GitHub 学编程

    作者:HelloGitHub-小鱼干&卤蛋 故事要从 2007 年说起.因为受够了 C++ 煎熬的 Google 首席软件工程师 Rob Pike 召集 Robert Griesemer 和 ...