洛谷P5520 青原樱

题目背景

星川之下皆萤火尘埃,
我独行在人潮你天真而待。
相遇若是借丹青着色,
青原上 绯樱如海。

——银临《青原樱》(Cover 人衣大人)

题目描述

扶苏是一个非常喜欢边听古风鸽边写数学题的人,因此这道题其实是个五三原题。

扶苏希望重现青原上樱花盛开的景色,于是他准备了很多互不相同樱花树幼苗,准备种成一行。

这一行中,一共有 nn 个位置可以种下樱花,而扶苏准备了 mm 支幼苗。由于樱花盛放时对左右空间需求非常大,所以樱花不能紧挨着种植,也就是任意两支幼苗之间必须至少存在一个不种花的空位置。

按照这种方式种花并不难,但是令扶苏感到好奇的是一共有多少合法的方案让他把这 mm 支幼苗都种下去。一个方案是合法的当且仅当他满足上一段中叙述的要求。如果我们将花按照 1,2,3,\dots,m1,2,3,…,m 编号,两种方案不同当且仅当被选择种花的位置不同或从左向右数花的编号序列不同。

为了避免输出过大,答案对一个参数 pp 取模。

输入格式

每个输入文件中有且仅有一组测试数据。

测试数据只有一行四个整数,依次代表 type,~n,~m,~ptype, n, m, p,其中 typetype 是一个帮助你判断测试点类型的参数,会在数据范围中说明。

输出格式

输出一行一个整数,代表答案对 pp 取模的结果。

输入输出样例

输入 #1复制

1 3 2 19260718

输出 #1复制

2

说明/提示

样例输入输出 1 解释

一共有 22 个樱花幼苗, 33 个种花的位置,如果给幼苗编号为 1,~21, 2,位置编号为 1,~2,~31, 2, 3,那么两种方案分别如下:

位置112233
方案 1幼苗 11幼苗 22
方案 2幼苗 22幼苗 11

数据规模与约定

本题采用多测试点捆绑测试,共有 6 个子任务

子任务编号n \leqn≤m \leqm≤type=type=特殊性质子任务分值
1111100特殊性质 155
22020202011特殊性质 11515
3400400200200222020
42000200020002000332020
5200000020000001000000100000044特殊性质 22020
62000000200000010000001000000552020

特殊性质 1:保证对应测试点的实际方案数(在取模前)不超过 10^6106

特殊性质 2:保证 pp 是一个质数。

对于 100\%100% 的数据,保证:

  • 1 \leq n \leq 2 \times 10^61≤n≤2×106。
  • 1 \leq m \leq 10^61≤m≤106。
  • 1 \leq p \leq 10^91≤p≤109。
  • 1 \leq m \leq \lceil\frac{n}{2} \rceil1≤m≤⌈2n​⌉。

提示

  • 请使用合适的数据类型来进行运算,避免溢出。
  • 参数 typetype 可以帮助你快速的判断子任务编号。

上代码:

 

#include <stdio.h>

int main() {
  int I, love, yin, lin;
  scanf("%d%d%d%d", &I, &love, &yin, &lin);
  love = love - yin + 1; 
  int ans = 1;
  for (int i = love - yin + 1; i <= love; ++i) {
    ans = 1ll * ans * i % lin;
  }
  printf("%d\n", ans);
  return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值