ZHX’s Contest

原创 2018年04月15日 16:08:08

题目描述
作为史上最贪玩的宏志狗,chty已经数月没交数学作业了,而他在月考中数学考了146分,完爆了全班同学,保平认为自己遭到了光速打脸,于是他给chty出了n道题,教他做人。
chty认为第i道题的难度就是i,他想让这些题目排列起来很漂亮。
chty认为一个漂亮的序列{an}下列两个条件均需满足。

1:a1..ai是单调递减或者单调递增的。

2:ai..an是单调递减或者单调递增的。

他想你告诉他有多少种排列是漂亮的。因为答案很大,所以只需要输出答案模p之后的值。

数据组数<=1000 1<=n,p<=10^18

输入格式
输入数据若干组

每组数据一行两个整数:n,p

输出格式
每组数据输出排列的方案数模p的结果。


基于题意,ai必然是数列中的最大值or最小值。两种情况是一样的,我们考虑ai是最大值。那么对于剩下的 n-1 个数,都有两种选择,放在 ai 左边或者右边。也就是说这种情况共有 2^( n-1 ) 种排列方式,最小值同理,相加共有 2^n种,但是当整个序列单调递增or递减的两种排列被重复计算了1次,所以总排列方式为 2^n-2。

特别地,n=1时,排列方式=1。

数据这么大,显然要用到快速幂,带取模,还要用到快速乘。这两者也还是《进阶指南》讲的清楚明白,回头单写博客啦88!

#include<bits/stdc++.h>
using namespace std;

long long n,p;

long long mul_(long long a,long long b)
{
    long long ans=0LL;
    for(;b;b>>=1) 
    {
        if(b&1) ans=(ans+a)%p;
        a=(a<<1)%p;
    }
    return ans;
}

long long fast_power(long long a,long long b)
{
    long long ans=1LL;
    for(;b;b>>=1) 
    {
        if(b&1) ans=mul_(ans,a);
        a=mul_(a,a);
    }
    return ans;
}

int main()
{
    while(cin>>n>>p)
    {
        if(n==1) printf("1\n");
        else printf("%lld\n",(fast_power(2LL,n)-2+p)%p);
    }
    return 0;
}
版权声明:=3= https://blog.csdn.net/hfl030/article/details/79950146

HDU - 5187 zhx's contest

题目大意: 作为史上最强的刷子之一,zhx的老师让他给学弟(mei)们出n道题。 zhx认为第i道题的难度就是i。他想要让这些题目排列起来很漂亮。 zhx认为一个漂亮的序列{ai}下列两个条件均需满...
  • kl28978113
  • kl28978113
  • 2015-03-15 18:41:33
  • 1504

hdu5187_zhx's contest(快速幂+快速乘法)

还是第一次用快速乘法呢,以前知道快速幂的道理,做BC的时候用同样的道理以加法改了一下乘法,后来一查原来有叫“快速乘法”的。   Problem Description As one of the...
  • XiaoPANGXia
  • XiaoPANGXia
  • 2015-03-16 19:44:36
  • 806

HDU - 5187 - zhx's contest (快速幂+快速乘)

zhx's contest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...
  • u014355480
  • u014355480
  • 2015-03-15 01:00:23
  • 1443

zhx's contest (hdu 5187 快速幂+快速乘法)

题意:数字1~n,按某种顺序排列,且满足下列某一个条件:(1)a1~ai递增,ai~an递减(2)a1~ai递减,ai~an递增。问有多少种不同的排列。 思路:首先是全部递减或全部递增各一种;另外就是...
  • u014422052
  • u014422052
  • 2015-03-14 23:15:39
  • 478

hdoj5187zhx's contest【快速幂+快速乘法】

zhx's contest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) To...
  • R1986799047
  • R1986799047
  • 2016-03-13 16:47:09
  • 523

HDU5187 zhx's contest(计数问题)

HDU5187 zhx's contest(计数问题)
  • u013790563
  • u013790563
  • 2015-03-16 20:16:59
  • 771

hdu5188zhx and contest [01背包至少li才能。。。]

Description As one of the most powerful brushes in the world, zhx usually takes part in all kinds...
  • zhou_yujia
  • zhou_yujia
  • 2016-05-20 22:04:16
  • 320

HDOJ 题目5188 zhx and contest(01背包,限制)

zhx and contest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)...
  • yu_ch_sh
  • yu_ch_sh
  • 2015-06-26 00:27:07
  • 516

hdoj zhx and contest 5188 (01背包)

zhx and contest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)...
  • yanghui07216
  • yanghui07216
  • 2016-02-26 10:22:10
  • 182

hdu 5188 zhx and contest && BestCoder Round #33

题解 & 分析:1.思考这个题目的时候思维很混乱       2.先是猜的搜索加优化没敢试,后来想按01背包模型来做       3.再来需要考虑按什么顺序访问这n个题目       4.证明可...
  • c337134154
  • c337134154
  • 2015-03-20 20:05:48
  • 830
收藏助手
不良信息举报
您举报文章:ZHX’s Contest
举报原因:
原因补充:

(最多只允许输入30个字)