Cyclic Permutations

Cyclic Permutations
在这里插入图片描述

  1. 题意

  2. 思路
    对于每个 i i i,如果存在这样的 q q q w w w
    q q q i i i 左 边 第 一 个 比 a i a_i ai 大 的 下 标
    w w w i i i 右 边 第 一 个 比 a i a_i ai 大 的 下 标
    那 么 容 易 证 明 q q q w w w 有 边 , 也 就 是 构 成 了 环
    证明
    因 为 ( q , i ] ( q , i ] (q,i] 中 没 有 比 a i a_i ai 大 的 , [ i , w ) [ i , w ) [i,w) 中 没 有 比 a i a_i ai 大 的, a q a_q aq a w a_w aw 就 是 [ q , w ] [ q , w ] [q,w] 中 最 大 和 次 大 , 必 定 连 边
    证毕
    Ⅰ . 方 法 一 : 组 合 构 造 \color{Red}Ⅰ.方法一:组合构造 .:
    但是直接考虑存在环的情况比较复杂,考虑不存在环的情况。不存在环,就是对于每个 i i i不能同时向左右连边,也就是有么只有左边有数比它大,要么只有右边有数比它大换言之就是要么左边都比自己小,要么右边都比自己小 这 其 实 构 成 了 一 个 单 峰 函 数 \color{Red}这其实构成了一个单峰函数 前面一直递增到峰值 n n n,后面一直递减
    图 Ⅱ . 方 法 二 : 思 维 , \color{Red}图Ⅱ.方法二:思维, .:,
    注 意 到 这 样 一 个 事 实 , 除 了 n 这 个 特 殊 的 数 注意到这样一个事实,除了n这个特殊的数注意到这样一个事实,除了n这个特殊的数
    其 他 数 都 有 比 自 己 大 的 数 , 也 就 是 一 定 会 至 少 往 外 连 一 条 边 其他数都有比自己大的数,也就是一定会至少往外连一条边其他数都有比自己大的数,也就是一定会至少往外连一条边
    这 样 就 就 必 定 会 连 n − 1 条 边 , 构 成 一 颗 树
    在 树 的 基 础 上 , 无 论 多 加 任 何 一 条 边 都 会 形 成 环 在树的基础上,无论多加任何一条边都会形成环在树的基础上,无论多加任何一条边都会形成环
    那 么 想 构 成 树 , 每 个 数 比 自 己 大 的 数 都 落 在 自 己 的 一 侧 ( 保 证 只 向 一 侧 连 边 ) 那么想构成树,每个数比自己大的数都落在自己的一侧(保证只向一侧连边)那么想构成树,每个数比自己大的数都落在自己的一侧(保证只向一侧连边)
    再 次 得 到 结 论 , 前 面 递 增 到 n , 后 面 递 减 再次得到结论,前面递增到n,后面递减再次得到结论,前面递增到n,后面递减

  3. 代码

#include <bits/stdc++.h>

using namespace std;
const int mod=1e9+7;
typedef long long ll;
int main() {
    ll n;
    scanf("%lld", &n);
    ll ans1 = 1, ans2 = 1;
    for (int i = 2; i <= n; i++) {
        ans1 = ans1 * 2 % mod;
        ans2 = ans2 * i % mod;
    }
    printf("%lld\n", ((ans2 - ans1) % mod + mod) % mod);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值