时间限制: 1.0 秒

空间限制: 256 MB

题目描述

球球是一位建筑师。一天,他收到市长的任务:建设城市。球球打算建造 2n 座高楼。为了保证城市美观,球球做出了如下计划:

  1. 球球喜欢整齐的事物。他希望高楼从左向右排成一行,编号依次为 1∼2n。
  2. 球球喜欢整数,他要求每座高楼的高度都是正整数。
  3. 由于材料限制,高楼的高度无法超过 m。
  4. 球球喜欢中间高,两边低的造型。他要求前 n 座高楼的高度不下降,后 n 座高楼的高度不上升。
  5. 球球打算选两座编号为 x,y 的高楼作为这座城市的地标。他认为只有当这两座高楼高度相等时,才会让城市变得美观。

球球把自己的想法告诉了市长。市长希望得知所有建设城市的方案数。两种方案不同,当且仅当某座高楼的高度在两个方案中不同。这个问题可难倒了球球。球球找到了你,希望你能帮他算出答案。由于答案可能很大,你只需要给出答案对 998244353 取模后的结果。

输入格式

从标准输入读入数据。

仅一行四个整数 m,n,x,y,变量意义见题目描述。

输出格式

输出到标准输出。

仅一行一个整数表示答案。

样例1输入

3 2 1 3

样例1输出

10

样例1解释

所有的方案为:{1,1,1,1},{1,2,1,1},{1,3,1,1},{2,2,2,1},{2,2,2,2},{2,3,2,1},{2,3,2,2},{3,3,3,1},{3,3,3,2},{3,3,3,3}。

样例2输入

1000 1000 535 1477

样例2输出

295916566

思路分析:

1.只在1~4的条件下(先不考虑x,y)如果一块区域有 n 栋高楼,m 个高度可以选,则相当于 n个相同的球放入 m 个不同的盒子 的方案数,由于楼的高度可以相等,则相当于n+m个相同的球放入 m 个不同的盒子 的方案数,每个盒子至少放一球。由插板法可知方案数

2.再考虑条件5,题目没有告诉我们 x,y 是否在 n 的两侧,所以要分情况讨论

(1)case1:x≤n<y

枚举 x,y的高度。假设当前 x,y的高度为 i,则:

  • x 左边的 x-1个高楼高度范围为 [1,i]。
  • x 右边 n 左边(包含 nn)的 n-x个高楼高度范围为 [i,m]。
  • n 右边(不包含 n)y左边的 y−n−1 个高楼高度范围为 [i,m]。
  • y 右边的 2n-y个高楼高度范围为 [1,i]。

根据乘法原理,将以上四种情况相乘即可。

(2)Case 2:y≤n 或 x,y>n。

将 [x,y] 中间的高楼看成一个高楼,则相当于

#include<iostream>
using namespace std;
const int mod=998244353;
int m,n,x,y;
long long int ans=0;int inverse(int x,int mod) {int power=mod-2;x %= mod;int num = 1;for (; power; power >>= 1, (x *= x) %= mod)if(power & 1) (num *= x) %= mod;return num;
}int cn(int a,int b)//组合数计算
{int sum=1;for(int i=1;i<=b;i++){sum=sum*(a-b+i)%mod;sum=sum*inverse(i,mod)%mod;//求i模mod的逆元 }return sum;
}int main()
{cin>>m>>n>>x>>y;if(x<=n&&y>=n)//case1情况 {for(int i=1;i<=m;i++)ans+=cn(x+i-1,i-1)*cn(n-x+m-i,m-i)*cn(y-n+m-i,m-i)*cn(2*n-y+i-1,i-1)%mod;cout<<ans;}else{ans=cn(n+m-1,m-1)*cn(n+m-1-x+y,m-1)%mod;cout<<ans;}return 0;}  

NOI Online能力测试视频版,让我们看看出题人们怎么说!

建设城市(city)(【CCF】NOI Online 能力测试2 入门组第三题 )相关推荐

  1. 游戏match(【CCF】NOI Online能力测试2 提高组第三题 )

    题目背景 1s 512M 题目描述 小 A 和小 B 正在玩一个游戏:有一棵包含 n=2m个点的有根树(点从1∼n 编号),它的根是 1 号点,初始时两人各拥有 m 个点.游戏的每个回合两人都需要选出 ...

  2. 未了(endless)(【CCF】NOI Online 能力测试2 入门组第一题 )

    时间限制: 1.0 秒 空间限制: 256 MB 题目描述 由于触犯天神,Sisyphus 将要接受惩罚. 宙斯命 Sisyphus 推一块巨石上长度为 L的山坡.Sisyphus 匀速向上推的速度为 ...

  3. 观星(【CCF】NOI Online能力测试3 入门组)

    题目描述 Jimmy 和 Symbol 约好一起看星星,浩瀚的星空可视为一个长为 N.宽为 M 的矩阵,矩阵中共有 N×M 个位置,一个位置可以用坐标 (i,j)(1≤i≤N,1≤j≤M)来表示.每个 ...

  4. 最急救助(【CCF】NOI Online能力测试3 入门组)

    题目描述 救助中心每天都要收到很多求救信号.收到求救信号后,救助中心会分析求救信号,找出最紧急的求救者给予救助. 求救信号是一个由小写英文字母组成的字符串,字符串中连续三个字符依次组成sos的情况越多 ...

  5. 买表(【CCF】NOI Online能力测试3 入门组)

    题目描述 Jimmy 到 Symbol 的手表店买手表,Jimmy 只带了 nn 种钱币,第 ii 种钱币的面额为 ki​ 元,张数为 ai​ 张.Symbol 的店里一共有 m 块手表,第 i 块手 ...

  6. 子序列问题sequence(【CCF】NOI Online能力测试2 提高组第二题 )

    本题代码稍后加入 题目背景 2s 512M 题目描述 给定一个长度为 n的正整数序列 A1, A2, ⋯, An .定义一个函数 f(l,r) 表示:序列中下标在 [l,r]范围内的子区间中,不同的整 ...

  7. 涂色游戏color(【CCF】NOI Online 能力测试2 提高组第一题 )

    子序列问题sequence([CCF]NOI Online能力测试2 提高组第二题 ) 游戏match([CCF]NOI Online能力测试2 提高组第三题 ) 题目背景 1s 256M 题目描述 ...

  8. 魔法值(【CCF】NOI Online能力测试3 提高组)

    题目描述 H 国的交通由 n 座城市与 m 条道路构成,城市与道路都从 1 开始编号,其中 1 号城市是 H 国的首都.H 国中一条道路将把两个不同城市直接相连,且任意两个城市间至多有一条道路. H ...

  9. 优秀子序列(【CCF】NOI Online能力测试3 提高组)

    题目描述 现在请你求出 A 的所有优秀子序列的价值之和,答案对 10^9+7 取模. 输入格式 第一行一个正整数 n 表示序列长度. 第二行 n 个用空格分隔的非负整数,表示 a1​,a2​,⋯,an ...

最新文章

  1. EMW 性能优化二之---并发配置
  2. python 转短链接_使用Python生成url短链接的方法
  3. 吴恩达《Machine Learning》精炼笔记 1:监督学习与非监督学习
  4. Korney Korneevich and XOR(CF750F1/F2)
  5. 三星s9php禁用列表,ADB禁用列表
  6. python方法解析顺序_浅谈Python的方法解析顺序(MRO)
  7. 互联网金融时代下机器学习与大数据风控系统
  8. ajax中加入if,如何添加if语句到Ajax
  9. 手把手教学电信天翼校园接入无线路由器(Windows Server版)
  10. uni-app 简介
  11. git branch -d和-D
  12. 传智黑马java基础学习——day14
  13. Android 蓝牙 inquiry、inquiry scan、page、page scan等概念解析
  14. PHP修改后缀名绕过
  15. 爱立信发布人体通信技术:最高传输10Mbps
  16. c罗图片带字经典语言,6张适合发朋友圈的人生哲理经典语句图片带字表情包 句句触动人心...
  17. postman-批量导入数据
  18. C++ Learning
  19. SAP-License-3种方法帮您有效减少License许可证授权支出
  20. 梯度、Hessian矩阵、平面方程的法线以及函数导数的含义

热门文章

  1. 初识HTML5(一)
  2. js实现(可实现局部打印)
  3. [C++] 头文件中的#ifndef,#define,#endif以及#pragma用法
  4. 持续集成(一)思想篇
  5. 【Spring 持久层】Spring 与 Mybatis 整合
  6. 《Algorithms》Comparable 实现希尔排序
  7. 我只是bug的搬运工之jsp 编辑预览时样式可以显示出来,而在浏览器浏览时无法显示出来!
  8. android 区域交错,android - 自动调整交错GridLayoutManager - 堆栈内存溢出
  9. c 语言从文件中读取字符串数组,C从文本文件读取到数组/字符串
  10. centos7安装java6_CentOS7.6安装openjdk