#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 = ;
LL dp[][];
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 = ; i <= ; ++i) {
dp[i][] = ;
dp[i][] = i;
}
for(int i = ; i <= ; ++i) {
for(int j = ; j <= i; ++j) {
dp[i][j] = dp[i-][j-] + dp[i-][j];
dp[i][j] %= MOD;
}
}
int n, m, x, y;
LL ans;
while(scanf("%d %d %d %d", &n, &m, &x, &y) != EOF) {
ans = ;
if(n == || m == ) {
ans = n + m - ;
} else {
for(int i = ; i <= m; ++i) {
ans += Search(, i, x, y);
ans += Search(n, i, x, y);
}
for(int i = ; i < n; ++i) {
ans += Search(i, , x, y);
ans += Search(i, m, x, y);
}
}
ans %= MOD;
cout << ans << endl;
}
}

hihocoder挑战赛13A的更多相关文章

  1. hihoCoder挑战赛23

    hihoCoder挑战赛23 A.Emulator 题意 给一张图,有\(N(N \le 300)\)个点, 给出任意两点之间的最短路. 求最多可以去掉多少条边,使得任意两点的最短路长度不变. 思路 ...

  2. hihocoder挑战赛26

    某蒟蒻成功的·写出了T1并rank16...小岛的题目真难... 传送门:http://hihocoder.com/contest/challenge26 T1 如果你想要暴力枚举的话显然是不行的 如 ...

  3. hihoCoder挑战赛25

    萌新第一次打hihoCoder的比赛有点慌 T1 T1并不是特别难想到dp就好做了 显而易见的是一个01背包问题 Code: #include <cstdio> #include < ...

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

    clj在某场hihoCoder比赛中的一道题,表示clj的数学题实在6,这道图论貌似还算可以... 题目链接:http://hihocoder.com/problemset/problem/1167 ...

  5. hihoCoder挑战赛34 B题(快速求第k轮冒泡排序的结果)

    官方题解:https://media.hihocoder.com/contests/challenge34/tutorials-previewed.pdf 题目链接:http://hihocoder. ...

  6. 【hihoCoder挑战赛28 A】异或排序

    [题目链接]:http://hihocoder.com/problemset/problem/1509 [题意] [题解] 每次找到相邻两个数的二进制形式中; 不同的最高位; 显然S在这一位必然是确定 ...

  7. hihoCoder挑战赛1 毁灭者问题

    题目链接:http://hihocoder.com/problemset/problem/1034 数据结构题,由于每个魔法单位有着不同的回复速度和上限,所以不能根据吸收时间点进行查询和更新.但是如果 ...

  8. [题解]hihoCoder挑战赛18——题目1 神奇字符串

    题目地址:http://hihocoder.com/problemset/problem/1264 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 我们说两个字符串是非常 ...

  9. hihoCoder挑战赛14 -1223

    描述 给定n个关于X的不等式,问最多有多少个成立. 每个不等式为如下的形式之一: X < C X <= C X = C X > C X >= C 输入 第一行一个整数n. 以下 ...

随机推荐

  1. 【bzoj1688】[USACO2005 Open]Disease Manangement 疾病管理

    题目描述 Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) is running through the farm. Far ...

  2. Virtualbox 上调整 Mac OS 分辨率 最简单方法

    Mac OS 分辨率:VBoxManage setextradata "Mac OS X 10.10" VBoxInternal2/EfiGopMode 3       ----代 ...

  3. 【Android自学日记】【转】Android Fragment 真正的完全解析(上)

    自从Fragment出现,曾经有段时间,感觉大家谈什么都能跟Fragment谈上关系,做什么都要问下Fragment能实现不~~~哈哈,是不是有点过~~~ 本篇博客力求为大家说明Fragment如何产 ...

  4. TransmitFile函数的简单使用

    简述 TransmitFile是一个扩展的 API,它允许在套接字连接上发送一个打开的文件.这使得应用程序可以避免亲自打开文件,重复地在文件执行读入操作,再将读入的那块数据写入套接字.相反,已打开的文 ...

  5. java的关闭钩子(Shutdown Hook)

    Runtime.getRuntime().addShutdownHook(shutdownHook);    这个方法的含义说明:        这个方法的意思就是在jvm中增加一个关闭的钩子,当jv ...

  6. appium for iOS config

    appium-doctor: Running iOS Checks ✔ Xcode is installed at /Applications/Xcode.app/Contents/Developer ...

  7. ACM/ICPC 之 DP解有规律的最短路问题(POJ3377)

    //POJ3377 //DP解法-解有规律的最短路问题 //Time:1157Ms Memory:12440K #include<iostream> #include<cstring ...

  8. Jade 模板引擎使用

    在 Express 中调用 jade 模板引擎 jade 变量调用 if 判断 循环 Case 选择 在模板中调用其他语言 可重用的 jade 块 (Mixins) 模板包含 (Includes) 模 ...

  9. Mac系统下开启和关闭隐藏文件的方法

    在Mac下找到终端,输入以下命令(注意区分大小写): 显示Mac隐藏文件的命令: defaults write com.apple.finder AppleShowAllFiles -bool tru ...

  10. git 修改注释信息

    1. push 之前 先看看自己提交过多少次,然后执行 git rebase -i HEAD~数字(你要修改你的第几次提交) 接下来执行,修改注释 git commit --amend 修改完注释之后 ...