ddd出的noip+模拟赛的T1

好难啊!

我的思路是用过河卒那样的加法原理算出1000*1000之内的两个点之间的距离,然后一个一个豆子来吃,吃到终点,方案数就乘法原理一个一个乘。

但是很不幸,评测的时候五颜六色,只有45pts。


正解是这样的:

你把人的坐标设为\((x,y)\),因为人只能往右或者下走,所以要不x来加1,要不y来加1。不管怎样他们的和都会+1。

所以我们搞个结构体,根据他们的坐标和从小到大排序。

然后就能一个点到一个点之间来算方案数。

这个方案数是多少呢?

设\(dx=x_i-x_{i-1},dy=y_i-y_{i-1}\),则局部方案数是\(C_{dx+dy}^{dx}\)或\(C_{dx+dy}^{dy}\)。

组合数就按照预处理阶乘,求逆元等步骤可以很快地单一搞出来。

所以这些东西相乘就是答案。


有个坑点:这些东西相乘的时候可能会在你没留意的时候爆int,所以还是long long保平安。昨晚因为这个调得我心态有点爆炸。

代码:

#include<cstdio>
#include<algorithm>#define ll long long
const ll maxn = 300005;
const ll mod = 1e9 + 7;
struct Nodes
{ll x, y;
} s[maxn];ll frac[maxn];ll n, m, k;
bool cmp(Nodes a, Nodes b)
{return a.x + a.y < b.x + b.y;
}ll exgcd(ll a, ll b, ll &x, ll &y)
{if(b == 0){ x = 1; y = 0; return a; }else{ll ret = exgcd(b, a % b, x, y);ll t = x;x = y;y = t - a / b * y;return ret;}
}
ll inv(ll a)
{// a * inv === 1 (mod p)// a * inv - y * p = 1ll x, y;exgcd(a, mod, x, y);return (x % mod + mod) % mod;
}
ll read()
{ll ans = 0, s = 1;char ch = getchar();while(ch > '9' || ch < '0'){ if(ch == '-') s = -1; ch = getchar(); }while(ch >= '0' && ch <= '9') ans = (ans << 3) + (ans << 1) + ch - '0', ch = getchar();return s * ans;
}
void init()
{frac[0] = 1;for(int i = 1; i <= 300000; i++) frac[i] = frac[i - 1] * i % mod;
}
ll C(ll m, ll n)
{return frac[m] * inv(frac[n]) % mod * inv(frac[m - n]) % mod;
}
int main()
{n = read(), m = read(), k = read();s[1] = (Nodes){1, 1};for(int i = 2; i <= k + 1; i++){s[i].x = read(), s[i].y = read();}s[k + 2] = (Nodes){n, m};k += 2;std::sort(s + 1, s + k + 1, cmp);ll ans = 1;init();for(int i = 2; i <= k; i++){ll dx = s[i].x - s[i - 1].x;ll dy = s[i].y - s[i - 1].y;if(dx < 0 || dy < 0){printf("0\n");return 0;}//printf("%d %d\n", dx, dy);ans = ans * C(dx + dy, dx) % mod;}printf("%lld\n", ans);return 0;}

转载于:https://www.cnblogs.com/Garen-Wang/p/9813494.html

T50759 吃豆子相关推荐

  1. 吃豆豆游戏的C语言程序码,C++实现基于控制台界面的吃豆子游戏

    本文实例讲述了C++实现基于控制台界面的吃豆子游戏.分享给大家供大家参考.具体分析如下: 程序运行界面如下所示: ESC键可退出游戏. main.cpp源文件如下: #include "li ...

  2. C++小项目-吃豆子游戏

    GMap.h #pragma once //保证头文件只被编译一次#include "stdafx.h"#define MAP_LEN 19 //逻辑地图大小 (逻辑地图由行.列各 ...

  3. 手把手教学MFC吃豆子教程

    手把手教学MFC吃豆子教程 本教程适用于零基础学员制作C++课程设计 编程工具:VC++6.0. 本次教学主要知识点: 1.控件消息响应. 2.CDC类函数的使用. 下面开始教学: 吃豆子的基本思想: ...

  4. 吃豆子过桥问题(转)

    转载博客:http://www.cnblogs.com/webary/p/4827688.html 吃豆子过桥问题 本题来自于百度校招面试题,通过一个简单的智力问题理解递归问题的解法. 一:问题描述 ...

  5. C++项目实战(二)——简化版 “吃豆子游戏---pacman” 实现

    本项目通过使用 windows 窗口应用程序 实现一个简化版的 吃豆子游戏,主要涉及的知识点包含有:面向对象编程思想.windows 消息循环的工作原理.windows 窗口应用程序实现.父类与子类的 ...

  6. 厉害的程序员都有吊炸天的实力,C++实现吃豆子游戏!

    作为"全世界卖得最多的街机游戏","吃豆人"大家再熟悉不过了.但它是"现代游戏AI鼻祖"这件事,恐怕知道的人不多. 这篇文章主要介绍了C++ ...

  7. 《吃豆子过桥问题》——经典智力题、面试题

    转载http://www.cnblogs.com/webary/p/4827688.html?utm_source=tuicool&utm_medium=referral 吃豆子过桥问题 本题 ...

  8. 基于JavaSwing开发吃豆子小游戏 课程设计 大作业源码

    基于JavaSwing开发吃豆子小游戏:   (大作业) 开发环境: Windows操作系统 开发工具: MyEclipse/Eclipse/idea+Jdk 运行效果图: 基于JavaSwing开发 ...

  9. c#吃豆子游戏,模仿百度在线应用吃豆子

    这是一款模仿百度在线吃豆子的应用,本人对于C#小游戏制作的理解不是很深.CSDN里面用c#做的吃豆子也实在是太少,有的也太过于简单,于是萌生了一个念头,做一款C#吃豆子游戏,希望互相学习. csdn下 ...

最新文章

  1. 【Android必备】与其他碎片进行通信(10)
  2. 解决哈希(HASH)冲突的主要方法
  3. 用Bioconductor对基因组注释
  4. boost::endian::endian_load的测试程序
  5. python修行之路(六 三级菜单实例)
  6. 【C++探索之旅】第一部分第四课:内存,变量和引用
  7. Java基础(六) static五大应用场景
  8. Linux 工程师技术 系统服务管理进阶
  9. 斐波那契数列的性质整理
  10. Python Imaging Library: ImagePalette Module(图像调色板模块)
  11. 离线百度地图,添加按钮点击切换卫星地图和街道地图(纯JS)
  12. Mybatis 入门到理解篇
  13. 东方通 -- 如何安装、启动、停止、卸载东方通中间件
  14. asp毕业设计——基于asp+access的仓储物流管理系统设计与实现(毕业论文+程序源码)——仓储物流管理系统
  15. 如何在pdf上编辑文字,分享一种小技巧
  16. Java基础进阶-评委打分系统
  17. 用计算机探求 已知,【计算机科学与探索杂志社】计算机科学与探索杂志社编辑部...
  18. 又一次Hillston*(山*)靶机渗透—20220717
  19. python 开发APP教程
  20. 苹果cms怎么修改数据库配置文件

热门文章

  1. gperftools的pprof安装
  2. Queue(队列)-Dequeue(双端队列)-Set-Map及迭代器 等相关方法
  3. 某知名OA高版本getshell思路(附部分脚本)
  4. 磁盘结构,原理,MBR,文件系统,分区,swap,加密,raid,配额
  5. 计算云台与转台的精度
  6. 创业板IPO过会14月后昆山香料及2保代收证监会警示函,未对产品性质作出审慎认定
  7. Win7下的IE8与XP下的IE8的不同
  8. 关系代数:σ π × ÷ ∪ ∩ − ⋈(⟗ ⟕ ⟖)
  9. python爬虫之免扫码登录实现疫情相关微博文章以及评论的获取(一)
  10. 考研 计算机网络第二章物理层 知识点总结