zoukankan      html  css  js  c++  java
  • 【快速幂+递推】单峰排列

    【题目描述】

    一 个 n 的 全 排 列 A[i] 是 单 峰 的 , 当 且 仅 当 存 在 某 个 x 使 得
    A[1]<A[2]<...<A[x]>A[x+1]>...> A[n]。
    例如,对于 9 的全排列,125798643 是一个单峰排列,123456789 也是一个单峰排列,
    但 356298741 就不是。
    试求 n 的单峰全排列的个数。
    【输入数据】
    输入一个数 n。
    输出数据
    输出 n 的全排列中单峰排列的个数。
    由于这个数可能很大,因此你只需要输出它 mod 1234567 的值。
    输入样例

    3

    输出样例

    4

    样例说明
    共有以下 4 种方案:个数
    123
    132
    231
    321

    【解题思路】

    根据数据,不难得出,n的全排列中单峰排列的个数为2n-1个,所以用快速幂就可以解决

    代码如下

     1  #include <iostream>
     2  using namespace std;
     3 int N=1234567;
     4  long long qpow (long long a,long long b)
     5  {
     6      long long base=a,ans=1;
     7      while (b!=0)
     8      {
     9          if (b&1!=0)
    10         {
    11             ans*=base;
    12             ans%=N;
    13         }  
    14          base*=base;
    15          base%=N;
    16          b>>=1;
    17      }
    18      return ans%N;
    19  }
    20  int main()
    21  {
    22      long long n;
    23      cin>>n;
    24      n-=1;
    25      cout<<qpow(2,n);
    26  }    
  • 相关阅读:
    RabbitMQ 部署记录
    Linux下安装db2
    CentOS7 安装 Redis 并设置开机启动
    Firewalld 使用指南
    centos7 redis安装教程
    Centos7下杀毒软件clamav的安装和使用
    centos7 zookeeper集群搭建
    centos开机执行JAR Shell脚本
    centos7 防火墙常用设置
    centos7 Systemd 指令详解
  • 原文地址:https://www.cnblogs.com/Alan-Anders/p/11061342.html
Copyright © 2011-2022 走看看