hihocoder挑战赛13A

#1191 : 小W与网格

描述

给定一个n*m的网格,左上角(1, 1),右下角(n, m)。

小w在(i, j),他会从"上左下右"四个方向中选定两个不同但正交的方向,然后他只能沿着这两个方向走,直到他走出网格。

小w想知道有多少种不同的走法。

两个走法不同当且仅当所经过的格子的集合不同。

输入

输入包含多组数据。

每组数据一行四个整数n, m, i, j。(1 <= i <= n <= 100, 1 <= j <= m <= 100)

输出

对于每组数据,输出一个整数表示方案数,答案对1000000007取模。

样例解释

无论怎么走,要么覆盖一格,要么覆盖两格。

样例输入
2 1 1 1
样例输出
2

只要到达了边沿,就可以选择出还是不出。

这道题目用到了杨辉三角(帕斯卡三角),参考

打一张表,在表里边存放到距离(x,y)坐标能走的方案数,可以自己推一下,杨辉三角里边的数和所走产生的方案数一致。

然后利用用for循环遍历 n*m 这张图上所有边沿上的点到 (x,y)的所能走的方案数(通过一个函数实现找到具体点到(x, y)的方案数),并加起来。

2 1 2 3 4
1 1(x,y) 1 1 1
2 1 2 3 4
3 1 3 6 10
4 1 4 10 20

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MOD = 1000000007;
LL dp[210][210];
LL Search(int x1, int y1, int x2, int y2) {
      return dp[abs(x1 - x2) + abs(y1 - y2)][abs(x1 - x2)];
}

int main() {
      for(int i = 0; i <= 205; ++i) {
            dp[i][0] = 1;
            dp[i][1] = i;
      }
      for(int i = 1; i <= 205; ++i) {
            for(int j = 2; j <= i; ++j) {
                  dp[i][j] = dp[i-1][j-1] + dp[i-1][j];
                  dp[i][j] %= MOD;
            }
      }
      int n, m, x, y;
      LL ans;
      while(scanf("%d %d %d %d", &n, &m, &x, &y) != EOF) {
            ans = 0;
            if(n == 1 || m == 1) {
                  ans = n + m - 1;
            } else {
                  for(int i = 1; i <= m; ++i) {
                        ans += Search(1, i, x, y);
                        ans += Search(n, i, x, y);
                  }
                  for(int i = 2; i < n; ++i) {
                        ans += Search(i, 1, x, y);
                        ans += Search(i, m, x, y);
                  }
            }
            ans %= MOD;
            cout << ans << endl;
      }
}

时间: 2024-08-05 00:17:29

hihocoder挑战赛13A的相关文章

统计hihoCoder挑战赛成绩的Python脚本

2月有两场比赛,总分前八的有纪念品.第一场排第11,要拿到奖品毫无把握..心血来潮写了个用来计算几场比赛总分排名的脚本,好让自己第一时间知道能不能得奖(囧),也稍微试下BeautifulSoup. # -*- coding: utf-8 -*- from bs4 import BeautifulSoup import urllib def updateScoreList(scoreList, url): """ :param scoreList: :param url: :r

hihoCoder挑战赛11.题目4 : 高等理论计算机科学(LCA)

clj在某场hihoCoder比赛中的一道题,表示clj的数学题实在6,这道图论貌似还算可以... 题目链接:http://hihocoder.com/problemset/problem/1167 由于是中文题目,题意不再赘述. 对于任意两条小精灵的活动路径a和b,二者相交的判断条件为b的两个端点的LCA在a的路径上:那么我们可以首先将每个活动路径端点的LCA离线预处理出来,对每个节点LCA值+1. 然后以某个节点(我选择的是节点1)为根进行深搜,算出一条从节点1到节点x的LCA值和,那么任意

hihoCoder挑战赛11 随机斐波那契

题目链接:http://hihocoder.com/problemset/problem/1164 题面: #1164 : 随机斐波那契 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 大家对斐波那契数列想必都很熟悉: a0 = 1, a1 = 1, ai = ai-1 + ai-2,(i > 1). 现在考虑如下生成的斐波那契数列: a0 = 1, ai = aj + ak, i > 0, j, k从[0, i-1]的整数中随机选出(j和k独立). 现在给定n,要

hihoCoder挑战赛11 益智游戏

题目链接:http://hihocoder.com/problemset/problem/1165 题面: 益智游戏 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 幽香今天心情不错,正在和花田里的虫子玩一个益智游戏. 这个游戏是这样的,对于一个数组A,幽香从A中选择一个数a,虫子从A中选择一个数b.a和b可以相同.她们的分数是a*b的因子的个数. 幽香和虫子当然想要获得尽可能的高的分数,你能告诉她们应该选择哪两个数吗. 由于幽香是个非常随意的人,数组A中的元素都是

hihoCoder挑战赛12 顺子(hihocoder 1177)

题目链接:http://hihocoder.com/problemset/problem/1177 题面: #1177 : 顺子 时间限制:6000ms 单点时限:1000ms 内存限制:256MB 描述 你在赌场里玩梭哈,已经被发了4张牌,现在你想要知道发下一张牌后你得到顺子的概率是多少? 假定赌场使用的是一副牌,四种花色的A.2.3.....J.Q.K共52张,这副牌只发给你了4张,你的剩下一张牌从剩下48张中任意取出一张. 顺子指的是点数连续的五张牌,包括10.J.Q.K.A这种牌型(不包

hihoCoder挑战赛1 毁灭者问题

题目链接:http://hihocoder.com/problemset/problem/1034 数据结构题,由于每个魔法单位有着不同的回复速度和上限,所以不能根据吸收时间点进行查询和更新.但是如果知道每个人在哪些时间点被吸收了,那么可以按照每个单位的情况更新,具体操作是:时间间隔超过Mi/Ri的则被吸收的值为Mi(设这样的间隔有x个),否则为Ri*时间间隔(设这样的间隔总时间长度为y),此魔法单位被吸收的总量为x*Mi+y*Ri. 如何快速求每个单位在哪些时间被吸收:维护一个有序序列记录时间

ACM学习历程—Hihocoder 1177 顺子(模拟 &amp;&amp; 排序 &amp;&amp; gcd)(hihoCoder挑战赛12)

时间限制:6000ms 单点时限:1000ms 内存限制:256MB   描述 你在赌场里玩梭哈,已经被发了4张牌,现在你想要知道发下一张牌后你得到顺子的概率是多少? 假定赌场使用的是一副牌,四种花色的A.2.3.....J.Q.K共52张,这副牌只发给你了4张,你的剩下一张牌从剩下48张中任意取出一张. 顺子指的是点数连续的五张牌,包括10.J.Q.K.A这种牌型(不包含同花顺,即构成顺子的五张牌花色不能相同).参见:https://zh.wikipedia.org/wiki/%E6%92%B

hihoCoder挑战赛4 光棍节

题目3 : 光棍节 时间限制:30000ms 单点时限:1000ms 内存限制:256MB 描述 尽管付出了种种努力,jzp还是得过光棍节. jzp非常不爽,但也无能为力,只能够哀叹起来他的命运.他想到了一位长者的人生经验:“人的一生,不光要靠自我奋斗,也要考虑历史的进程”. 他终于明白自己只是时运不济,所以又继续开始努力.终于在圣诞节当天把到了妹子. jzp从此过上了快乐的现充生活,在圣诞节当天,他还和妹子玩起了有趣的游戏: jzp的家里有一棵非常大的圣诞树,可以看成是一个n个点的无向联通无环

hihoCoder挑战赛28 题目3 : 树的方差

题目3 : 树的方差 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 对于一棵 n 个点的带标号无根树,设 d[i] 为点 i 的度数. 定义一棵树的方差为数组 d[1..n] 的方差 给定 n ,求所有带标号的 n 个点的无根树的方差之和. 你需要将答案对 998244353 取模. 方差的定义:https://en.wikipedia.org/wiki/Variance 输入 仅一行:一个正整数 n 2 ≤ n ≤ 106 输出 仅一行:一个非负整数表示答案 样