【题目背景】

墙角那株海棠,是你种下的思念。

生死不能忘,高烛照容颜。

一曲江城唱晚,重忆当年坐灯前,

青衫中绣着你留下的线。

——银临《江城唱晚》

【问题描述】

扶苏是个喜欢一边听古风歌一边写数学题的人,所以这道题其实是五三原题。

歌曲中的主人公看着墙边的海棠花,想起当年他其实和自己沿着墙边种了一排海 棠,但是如今都已枯萎,只剩下那一株,寄托着对他深深的思念。

沿着墙一共有 n 个位置可以种下海棠花,主人公记得自己当年和他一共种下了 m 朵,由于花的特性,海棠不能紧挨着种植,也就是两朵海棠花之间最少间隔一个不种花 的空位置。但是她记不清当时海棠花具体是怎么摆放的了,所以她想知道一共有多少方 案使得 m 朵海棠花都被种下且两两之间不是相邻的。我们将这 m 朵海棠花按照 1,2,3…m 的顺序编号,两个种花的方案不同当且仅当它们被种下的位置不同或者从左向 右数花的编号序列不同。

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

【输入格式】

输入文件名为 ilove.in。

输入文件中有且仅有一组数据,只有一行四个数字,分别代表 type,n,m,p。其中 type 是一个帮助你判断测试点类型的参数,会在数据范围中说明。

【输出格式】

输出文件名为 ilove.out。

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

【输入输出样例 】

【数据规模与约定】


然后这套题的最后有句话:

(我恨了)

好了下面来说正解


SOLUTION:

首先,这是一道五三上的原题,所以它一定可以用数学的方法来计算。

其实这是一道zhx问题,但当你找不到思路时,不妨在考场上打打表找规律

如果关心排列顺序的话,每个n与m的组合似乎都对应一个排列数呢qwq

n=8,m=3对应排列数:C63,n=7,m=3对应排列数:C53

而样例对应的C22,再仔细观察,不难推测对应的排列数与n和m的取值有关,于是我们大胆假设,在不考虑排列顺序的前提下,这m盆花摆在n个位置的方案数是Cn-m+1m(好啦数学证明一下)

(对于任意两盆海棠花,不可以相邻的种植,那么每盆海棠花相当于占据了两个位置,因为会有一盆并不需要占据,例如对于三盆花,需要占据五个位置,所以我们用n-m+1,直接删去一定不能占的位置,或者我们可以感性的理解成:先将这m盆花放到n-m+1个位置中(不考虑空隙),如果两盆花相邻了,就加一个空位在这两盆花中间。那么方案数就是将m盆花摆放在n-m+1个空位中的方案数)

求出了所有组合方案后,对于每种方案,都有Amm种不同的排列方法,所以最后答案就是:

Cn-m+1m*Amm

但是问题来了,看数据范围:

这可了不得了,这怎么算啊;

其实上面的式子可以展开再化简:

Cn-m+1m=(n-m+1)! /m!*(n-2m+1)!

Amm=m!;

Cn-m+1m*Amm=(n-m+1)!/(n-2m+1)!

=(n-m+1)*(n-m)*……*(n-2m+2);

所以这样就可以用很短的代码直接for循环出来啦:

#include<bits/stdc++.h>

using namespace std;

inline long long read(){
long long ans=;
char last=' ',ch=getchar();
while(ch<''||ch>'') last=ch,ch=getchar();
while(ch<=''&&ch>='') ans=ans*+ch-'',ch=getchar();
if(last=='-') ans=-ans;
return ans;
} long long type,n,m,p; int main(){
type=read();n=read();m=read();p=read();
long long ans=;
for(int i=n-*m+;i<=n-m+;i++)
ans=(ans*i)%p;
printf("%d",ans%p);
return ;
}

毕竟zay写了题解,所以我们放一下:

end-

【6.24校内test】T1 江城唱晚的更多相关文章

  1. 模拟赛DAY 2 T1江城唱晚

    [题目背景] 墙角那株海棠,是你种下的思念. 生死不能忘,高烛照容颜. 一曲江城唱晚,重忆当年坐灯前, 青衫中绣着你留下的线. ——银临<江城唱晚> [问题描述] 扶苏是个喜欢一边听古风歌 ...

  2. zay大爷的膜你题 D2T1 江城唱晚

    依旧是外链... 这一次网易云爆炸了....所以我决定后面的都用QQ 下面是题面 这道题是一道傻逼题 数学题,我们仔细看一看,首先有m朵花的话,我们就有m!种排列方式(也就是m的全排列), 然后我们假 ...

  3. 6.25考试整理:江城唱晚&&不老梦&&棠梨煎雪——题解

    按照旧例,先安利一下主要作者:一扶苏一 以及扶苏一直挂念的——银临姐姐:银临_百度百科 (滑稽) 好哒,现在步入正题: 先看第一题: 题解: 在NOIP范围内,看到“求方案数”,就说明这个题是一个计数 ...

  4. 2019.6.24 校内测试 NOIP模拟 Day 2 分析+题解

    看到Day 2的题真的想打死zay了,忒难了QwQ~ T1 江城唱晚 这明显是个求方案数的计数问题,一般的套路是DP和组合数学. 正如题目中所说,这个题是一个 math 题.      ----zay ...

  5. 【7.24校内交流赛】T1&T2

    T1: 一个脑洞很大的题,将输入的所有数异或起来输出就好了: (话说我为什么这么喜欢用异或啊) #include<bits/stdc++.h> using namespace std; i ...

  6. [3.24校内训练赛by hzwer]

    来自FallDream的博客,未经允许,请勿转载,谢谢. ----------------------------------------------------------------------- ...

  7. 18清明校内测试T1

    消失的数字(number) Time Limit:1000ms   Memory Limit:128MB 题目描述 rsy拥有n个数,这n个数分别是a1,a2,…,an. 后来出现了一个熊孩子zhw, ...

  8. 2019.7.9 校内测试 T1挖地雷

    这一次是交流测试?边交流边测试(滑稽 挖地雷 这个题是一个递推问题. 首先我们看第一个格子,因为它只影响了它的上面和右上面这两个地方是否有雷. 我们可以分3种情况讨论: 1. 第一个格子的数字是2: ...

  9. 2019.6.28 校内测试 T1 Jelly的难题1

    这题面有点难理解,建议直接跳到题意解释那一部分(虽然我觉得解释的不大对,但按照解释来做确实能AC): 按照“题意解释”的思路来思考这个题,那么就十分的简单了: 1.首先要读入这个字符矩阵,可以用cin ...

随机推荐

  1. FreeRTOS系列第14篇---FreeRTOS任务通知

    注:本文介绍任务通知的基础知识,具体源代码分析见<FreeRTOS高级篇8---FreeRTOS任务通知分析> 每一个RTOS任务都有一个32位的通知值,任务创建时,这个值被初始化为0.R ...

  2. 1.jdk安装和环境配置

    这个简单,但是记不住,非要网上搜一遍不可: 1.打开我的电脑--属性--高级--环境变量 2.新建系统变量JAVA_HOME 和CLASSPATH 变量名:JAVA_HOME 变量值:C:\Progr ...

  3. 怎样处理Gradle中的这个文件下载慢的问题的

    如图:在build.gradle中的dependencies中加上要依赖的包后,就点击sync gradle.然后就开始了下载.在此过程中我是FQ了的(在此同时我是可以用chrome进入https:/ ...

  4. 【HDU 4547】 CD操作

    [题目链接] 点击打开链接 [算法] 分四种情况讨论 : 1. 当前目录和目标目录是同一目录,不需要变换,答案为0 2. 当前目录是目标目录的祖先,答案为当前目录的深度 - 目标目录的深度 3. 当前 ...

  5. ZOJ 3955 Saddle Point 校赛 一道计数题

    ZOJ3955 题意是这样的 给定一个n*m的整数矩阵 n和m均小于1000 对这个矩阵删去任意行和列后剩余一个矩阵为M{x1,x2,,,,xm;y1,y2,,,,,yn}表示删除任意的M行N列 对于 ...

  6. P4244 [SHOI2008]仙人掌图 II

    传送门 仙人掌直径,以前好像模拟赛的时候做到过一道基环树的直径,打了个很麻烦的然而还错了--今天才发现那就是这个的弱化版啊-- 如果是树的话用普通的dp即可,记\(f[u]\)表示\(u\)往下最长能 ...

  7. vue3.0新特性以及进阶路线

    Vue3.0新特性/改动 新手学习路线  ===> 起步 1. 扎实的 JavaScript / HTML / CSS 基本功.这是前置条件. 2. 通读官方教程 (guide) 的基础篇.不要 ...

  8. [Usaco2013 Nov]No Change

    Description Farmer John is at the market to purchase supplies for his farm. He has in his pocket K c ...

  9. 01背包(类) UVA 10564 Paths through the Hourglass

    题目传送门 /* 01背包(类):dp[i][j][k] 表示从(i, j)出发的和为k的方案数,那么cnt = sum (dp[1][i][s]) 状态转移方程:dp[i][j][k] = dp[i ...

  10. Windows8.1查看已连接无线WIFI密码

    Windows8.1操作系统下查看已连接无线wifi密码操作步骤如下: 1.右键任务栏中的无线图标,在弹出的菜单中选择"打开网络和共享中心": 2.在网络和共享中心界面中点击&qu ...