【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

  1. #include<bits/stdc++.h>
  2. #define rg register
  3. using namespace std;
  4. long long n,m,x,tot[100005],ans[1000005];
  5. bool b[100005];
  6. inline long long read()
  7. {
  8. long long res=0;char ch;
  9. ch=getchar();
  10. while (ch<'0'||ch>'9') ch=getchar();
  11. while (ch>='0'&&ch<='9')
  12. {
  13. res=(res<<1)+(res<<3)+(ch-'0');
  14. ch=getchar();
  15. }
  16. return res;
  17. }
  18. int main()
  19. {
  20. n=read();m=read();
  21. memset(b,true,sizeof(b));
  22. b[1]=false;
  23. for (rg long long i=2;i<=100005;i++)
  24. for (rg long long j=2;j*i<=100005;j++)
  25. b[i*j]=false;
  26. x=n+1-m;
  27. for (rg long long i=2;i*i<=x;i++)
  28. {
  29. if (b[i]==true&&x%i==0)
  30. {
  31. while (x%i==0)
  32. {
  33. tot[i]++;
  34. x/=i;
  35. }
  36. }
  37. }
  38. if (x>1) tot[x]++;
  39. for (rg long long j=2;j<=n+m;j++)
  40. {
  41. long long k=j;
  42. for (rg long long i=2;i*i<=k;i++)
  43. {
  44. if (b[i]==true&&k%i==0)
  45. {
  46. while (k%i==0)
  47. {
  48. tot[i]++;
  49. k/=i;
  50. }
  51. }
  52. }
  53. if (k>1) tot[k]++;
  54. }
  55. for (rg long long j=2;j<=m;j++)
  56. {
  57. long long k=j;
  58. for (rg long long i=2;i*i<=k;i++)
  59. {
  60. if (b[i]==true&&k%i==0)
  61. {
  62. while (k%i==0)
  63. {
  64. tot[i]--;
  65. k/=i;
  66. }
  67. }
  68. }
  69. if (k>1) tot[k]--;
  70. }
  71. for (rg long long j=2;j<=n+1;j++)
  72. {
  73. long long k=j;
  74. for (rg long long i=2;i*i<=k;i++)
  75. {
  76. if (b[i]==true&&k%i==0)
  77. {
  78. while (k%i==0)
  79. {
  80. tot[i]--;
  81. k/=i;
  82. }
  83. }
  84. }
  85. if (k>1) tot[k]--;
  86. }
  87. ans[0]=1;
  88. ans[1]=1;
  89. for (rg long long i=1;i<=100000;i++)
  90. {
  91. if (b[i]==true&&tot[i]>0)
  92. {
  93. for (rg long long j=1;j<=tot[i];j++)
  94. {
  95. for (rg long long k=1;k<=ans[0];k++)
  96. ans[k]*=i;
  97. x=0;
  98. for (rg long long k=1;k<=ans[0];k++)
  99. {
  100. ans[k]+=x;
  101. x=ans[k]/10;
  102. ans[k]%=10;
  103. }
  104. ans[ans[0]+1]=x;
  105. while (ans[ans[0]+1])
  106. {
  107. ans[0]++;
  108. ans[ans[0]+1]=ans[ans[0]]/10;
  109. ans[ans[0]]%=10;
  110. }
  111. }
  112. }
  113. }
  114. for (rg long long i=ans[0];i>=1;i--)
  115. printf("%lld",ans[i]);
  116. return 0;
  117. }

【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. [P2114] [NOI2014]起床困难综合症 (位运算)

    题面 传送门:https://www.luogu.org/problemnew/show/P2114 Solution 一道很有意思的位运算题. 要做这一题,我们首先得了解一个很重要的特点 位运算过程 ...

  2. nextInt()和nextLine()连用报错

    当nextInt(),next(),nextDouble(),nextFloat()方法与nextLine()连用并放在nextLine()前面时,会出现下面的错误: Exception in thr ...

  3. 一次打包引发的思考,原来maven还能这么玩?

    持续原创输出,点击上方蓝字关注我 目录 前言 依赖关系 你会怎么做? 必知的几个参数 总结 前言 昨天有一个读者找我的交流工作心得,偶然间提到一个有趣的问题,如下: 「大致的意思」:公司最近在整多模块 ...

  4. MVC中Cookie的用法(二)---CookieHelper

    public class CookieHelper { /// <summary> /// 1.1添加Cookie /// </summary> /// <param n ...

  5. C++函数四( 具有默认参数值的函数)

    在C++语言中,可以设置函数形参的默认值,在调用函数时,若明确给出了实参的值,则使用相应实参的值;若没有给出相应实参的值,则使用默认的值.这将为函数调用带来方便和灵活. [示例] #include&l ...

  6. EVM 2.0 预览版,跃见非凡,源于鸿蒙,开启物联网小程序新时代

    1. 基于EVUE的物联网小程序 EVM诞生以来,一直致力于让物联网开发变得简单,自鸿蒙OS 1.0 发布后,最引人注目的莫过于华为在应用程序开发框架层面面向应用开发者提供了一种全新的开发方式: 框架 ...

  7. jquery实现回车键执行ajax

    $('#txtKey').bind('keypress',function(event){ if(event.keyCode == "13") { alert(1) }});

  8. QQ群web前端分析二——第一印象

    对QQ群WEB进行前端分析 入口是 http://qun.qzone.qq.com/ 以下为第一印象,主要是从我的理解上找问题. ----------------------------------- ...

  9. rbd-mirror配置指南-单向备份

    前言 RBD 的 mirroring 功能将在Jewel中实现的,这个Jewel版本已经发布了很久了,这个功能已经在这个发布的版本中实现了,本来之前写过一篇文章,但是有几个朋友根据文档配置后,发现还是 ...

  10. C++中STL的sort函数

    简单介绍C++ sort函数 这个函数需要STL算法头文件 #include <algorithm> using namespace std; 这个sort( , , )可以带两个参数也可 ...