【GDOI2014模拟】网格
题目
某城市的街道呈网格状,左下角坐标为A(0, 0),右上角坐标为B(n, m),其中n >= m。现在从A(0, 0)点出发,只能沿着街道向正右方或者正上方行走,且不能经过图示中直线左上方的点,即任何途径的点(x, y)都要满足x >= y,请问在这些前提下,到达B(n, m)有多少种走法。
分析
首先,我们知道:如果现在从(0, 0)点出发,只能沿着街道向正右方或者正上方行走时,到(n,m)点(n>=m)的方案数是\(C^{m}_{n+m}\)。
发现,任何途径的点(x, y)都要满足x>=y就是不经过粉色线x=y+1
有一条违法的路径:
我们把路径按照粉色线做个对称,
我们发现,到橙色点的路径都一一对应每一条违法路径,也就是说,违法路径的方案数就是到橙色点的方案数。
所以,合法方案数=随便走的方案数-违法方案数=\(C^{m}_{n+m}-C^{m-1}_{n+m}\)
注意:如果直接算可能会超时,要把式子简化,而且高精度要压位。
#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
const int maxlongint=2147483647;
const int mo=10000;
using namespace std;
int f[20000],n,m,g[20000];
inline int times(int x)
{
memcpy(g,f,sizeof(g));
f[1]=0;
f[0]=g[0]+4;
for(int i=1;i<=f[0];i++)
{
f[i]+=g[i]*x;
f[i+1]=f[i]/mo;
f[i]-=f[i+1]*mo;
}
while(!f[f[0]] && f[0]>1)
f[0]--;
}
inline int div(int x)
{
memcpy(g,f,sizeof(g));
int k=0;
for(int i=g[0];i>=1;i--)
{
f[i]=(k*mo+g[i])/x;
k=(k*mo+g[i])-x*f[i];
}
f[0]=g[0];
while(!f[f[0]] && f[0]>1)
f[0]--;
}
int main()
{
scanf("%d%d",&n,&m);
f[0]=1;
f[1]=1;
int j=2;
for(int i=n+2;i<=n+m;i++)
{
if(j<=m)
{
if(i%j==0)
{
times(i/j);
j++;
}
else
times(i);
}
}
times(n+1-m);
for(int i=j;i<=m;i++)
{
div(i);
}
for(int i=f[0];i>=1;i--)
{
if(f[0]!=i)
printf("%04d",f[i]);
else
printf("%d",f[i]);
}
}
【GDOI2014模拟】网格的更多相关文章
- 【GDOI2014模拟】JZOJ2020年8月14日T2 网格
[GDOI2014模拟]JZOJ2020年8月14日T2 网格 题目 Time and Memory Limits Description 某城市的街道呈网格状,左下角坐标为A(0, 0),右上角坐标 ...
- 【GDOI2014模拟】JZOJ2020年8月14日提高组 服务器
[GDOI2014模拟]JZOJ2020年8月14日提高组 服务器 题目 Time and Memory Limits Description 我们需要将一个文件复制到n个服务器上,这些服务器的编号为 ...
- jzoj 3431. 【GDOI2014模拟】网格
Description 某城市的街道呈网格状,左下角坐标为A(0, 0),右上角坐标为B(n, m),其中n >= m.现在从A(0, 0)点出发,只能沿着街道向正右方或者正上方行走,且不能经过 ...
- GDOI2014模拟pty爬山(mountain)
pty爬山(mountain) 在Pty学校附近,有一座名之为岳之麓的高山.Pty很喜欢和(哔--)一起爬山.山的平面模型如下:山由一个顶点集:A1,A2-An给定,保证Ai的x单调递增.我们将Ai和 ...
- GDOI2014模拟 旅行【SPFA】
旅行(travel) 从前有一位旅者,他想要游遍天下所有的景点.这一天他来到了一个神奇的王国:在这片土地上,有n个城市,从1到n进行编号.王国中有m条道路,第i条道路连接着两个城市ai,bi,由于年代 ...
- 【GDOI2014模拟】服务器
前言 直到比赛最后几分钟,才发现60%数据居然是一个水dp,结果没打完. 题目 我们需要将一个文件复制到n个服务器上,这些服务器的编号为S1, S2, -, Sn. 首先,我们可以选择一些服务器,直接 ...
- 【GDOI2014模拟】Tree
题目 Wayne 在玩儿一个很有趣的游戏.在游戏中,Wayne 建造了N 个城市,现在他想在这些城市间修一些公路,当然并不是任意两个城市间都能修,为了道路系统的美观,一共只有M 对城市间能修公路,即有 ...
- 【GDOI2014模拟】雨天的尾巴
题目 深绘里一直很讨厌雨天. 灼热的天气穿透了前半个夏天,后来一场大雨和随之而来的洪水,浇灭了一切. 虽然深绘里家乡的小村落对洪水有着顽固的抵抗力,但也倒了几座老房子,几棵老树被连 根拔起,以及田地里 ...
- [JZOJ3400] 【GDOI2014模拟】旅行
题目 题目大意 给你一个图,让你选择权值和最小的边,使得\(1\)和\(n\),\(2\)和\(n-1\),--,\(K\)和\(n-K+1\)联通. \(K\leq 4\) 思考历程 一看到这题就觉 ...
随机推荐
- 禁止SYS和SYSTEM用户远程登录Oracle oracle的sys和system默认密码
alter system set remote_login_passwordfile=none scope=spfile; system默认:manager sys默认:change_on_insta ...
- win10家庭版安装Docker (Docker Toolbox)
开启CPU的虚拟化功能(自行百度)之前安装了VM所以这部跳过.具体查看可以打开任务管理器->性能->cpu 查看是否有 虚拟化:已启用字样 下载Docker Toolbox 下载地址 h ...
- .net core 学习小结之 配置介绍(config)以及热更新
命令行的配置 var settings = new Dictionary<string, string>{ { "name","cyao"}, {& ...
- 20191127 Spring Boot官方文档学习(5)
5.Spring Boot Actuator:可投入生产的功能 Spring Boot包含许多其他功能,可帮助您在将应用程序投入生产时监控和管理您的应用程序.您可以选择使用HTTP端点或JMX管理和监 ...
- Python解释器判断整数相加溢出
溢出,则和的最高位(即符号位)与两个加数都不相同,例如 1)非负数+非负数=负数 2)负数+负数=非负数 那么,假设x为a与b的和,((a^b)>=0 && (x^a)<0 ...
- 使用Oracle12c 以上的PDB创建数据库用户 密码过期的简单处理
1. 先通过监听查看PDB的名字 Windows 打开命令行: 输入命令 lsnrctl status 一般在如图示的最下面 2. 也可以通过GS的全局配置文件来查看 数据库连接SID信息. C:\P ...
- C#打印条码BarTender SDK打印之路和离开之路(web平凡之路)(转)
C#打印条码BarTender SDK打印之路和离开之路(web平凡之路) 从来没想过自己会写一篇博客,鉴于这次从未知的探索到一个个难点的攻破再到顺利打印,很想记录这些点滴,让后人少走弯路. 下面走进 ...
- java常用类详细介绍及总结:字符串相关类、日期时间API、比较器接口、System、Math、BigInteger与BigDecimal
一.字符串相关的类 1.String及常用方法 1.1 String的特性 String:字符串,使用一对""引起来表示. String声明为final的,不可被继承 String ...
- Linux 创建与删除(5)
相对于Windows下的右键新建文件与删除,我更喜爱Linux下的命令式创建与删除,真的方便.不过Windows下也可以借助工具来实现,比如git bash.cmder等等终端工具. 创建文件 新建文 ...
- Linux 環境下安裝swoole
一.先安装依赖 yum -y install gcc gcc-c++ autoconf automake yum -y install zlib zlib-devel openssl openssl- ...