zoukankan      html  css  js  c++  java
  • 校内题目江城唱晚

    1.江城唱晚
     
    【题目背景】
    墙角那株海棠,是你种下的思念。
    生死不能忘,高烛照容颜。
    一曲江城唱晚,重忆当年坐灯前,
    青衫中绣着你留下的线。
    ——银临《江城唱晚》
    【问题描述】
    扶苏是个喜欢一边听古风歌一边写数学题的人,所以这道题其实是五三原题。
    歌曲中的主人公看着墙边的海棠花,想起当年他其实和自己沿着墙边种了一排海
    棠,但是如今都已枯萎,只剩下那一株,寄托着对他深深的思念。
    沿着墙一共有 n 个位置可以种下海棠花,主人公记得自己当年和他一共种下了 m
    朵,由于花的特性,海棠不能紧挨着种植,也就是两朵海棠花之间最少间隔一个不种花
    的空位置。但是她记不清当时海棠花具体是怎么摆放的了,所以她想知道一共有多少方
    案使得 m 朵海棠花都被种下且两两之间不是相邻的。我们将这 m 朵海棠花按照
    1,2,3…m 的顺序编号,两个种花的方案不同当且仅当它们被种下的位置不同或者从左向
    右数花的编号序列不同。
    为了避免输出过大,答案对一个参数 p 取模
    【输入格式】
    输入文件名为 ilove.in。
    输入文件中有且仅有一组数据,只有一行四个数字,分别代表 type,n,m,p。其中
    type 是一个帮助你判断测试点类型的参数,会在数据范围中说明。
    【输出格式】
    输出文件名为 ilove.out。
    输出一行一个数字,代表答案对 p 取模的结果。
    【输入输出样例 1】
    ilove.in ilove.out
    输入1 3 2 19260718
    输出2

    说实在的要是会式子你那个type没啥用。。
    正解开始:
    对于这个,你可以打一个深搜暴力来骗点分:详情请见洛谷题目选数;
    关键在于,选数这道题用深搜暴力可以枚举每一种方案,但是这个题只是问方案数,并不需要具体到每一种;
    那么除了深搜骗分,还可以推式子来搞这个题;
     
    题目中说,对于两盆花,它们中间一定至少有一个空,对于m盆花,它们中间一定有m-1个空不能填
     
    那么,把这m-1个空去除,剩下n-(m-1)也就是n-m+1个空,
     
    从这n-m+1个空中选出m个空来放置花,用组合数

    来计算。

    对于上图每一种情况,都有

    种不同的顺序排放,那么总数也就是

    化简以后即为下文代码中的

    代码:
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int n,m,type,p;
    int main(){
        freopen("ilove.in","r",stdin);
        freopen("ilove.out","w",stdout);
        scanf("%d%d%d%d",&type,&n,&m,&p);
        long long ans=1;
        for(int i=n-2*m+2;i<=n-m+1;i++)
        {
            ans=(ans*i)%p;
        }
        printf("%lld",ans);
        return 0;
    }
  • 相关阅读:
    使用 requests 维持会话
    使用 requests 发送 POST 请求
    使用 requests 发送 GET 请求
    requests 安装
    使用 urllib 分析 Robots 协议
    使用 urllib 解析 URL 链接
    使用 urllib 处理 HTTP 异常
    使用 urllib 处理 Cookies 信息
    使用 urllib 设置代理服务
    按单生产程序发布
  • 原文地址:https://www.cnblogs.com/lbssxz/p/11082869.html
Copyright © 2011-2022 走看看