当前位置: 首页 > news >正文

小红的好排列【牛客tracker 每日一题】

小红的好排列

时间限制:1秒 空间限制:256M

知识点:数论

网页链接

牛客tracker

牛客tracker & 每日一题,完成每日打卡,即可获得牛币。获得相应数量的牛币,能在【牛币兑换中心】,换取相应奖品!助力每日有题做,丰盈牛币日益多!

题目描述

小红认为一个偶数长度为n nn的排列{ a 1 , a 2 , … , a n } \{ a_1,a_2,…,a_n \}{a1,a2,,an}是好排列,当且仅当恰好有一半的i ii使得a i × i a_i×iai×i3 33的倍数。
小红想知道,全部长度为n nn的排列中,共有多少个好排列?由于答案可能很大,请将答案对( 10 9 + 7 ) (10^9+7)(109+7)取模后输出。

长度为n nn的排列是由1 ∼ n 1∼n1nn nn个整数、按任意顺序组成的数组,其中每个整数恰好出现一次。例如,{ 2 , 3 , 1 , 5 , 4 } \{ 2,3,1,5,4 \}{2,3,1,5,4}是一个长度为5 55的排列,而{ 1 , 2 , 2 } \{ 1,2,2 \}{1,2,2}{ 1 , 3 , 4 } \{ 1,3,4 \}{1,3,4}都不是排列,因为前者存在重复元素,后者包含了超出范围的数。

输入描述:

在一行上输入一个正偶数n ( 2 ≦ n ≦ 10 6 ) n(2≦n≦10^6)n(2n106)代表排列中的元素数量。

输出描述:

输出一个整数,代表好排列的数量。由于答案可能很大,请将答案对( 10 9 + 7 ) (10^9+7)(109+7)取模后输出。

示例1

输入:

2

输出:

0

说明:

在这个样例中,长度为2 22的排列有且仅有两个:

示例2

输入:

4

输出:

18

说明:

在这个样例中,一共有18 1818个长度为4 44的排列满足条件,例如:

解题思路

首先预处理阶乘和逆元阶乘(借助费马小定理快速幂求逆元),用于O ( 1 ) O(1)O(1)计算组合数;统计1 ˜ n 1 \~\ n1˜n3 33的倍数的数(及位置)个数k = n / / 3 k=n//3k=n//3,非3 33的倍数的数(及位置)个数m = n − k m=n−km=nk。好排列要求恰好n / 2 n/2n/2个位置满足a i × i a_i×iai×i3 33的倍数,推导得该条件等价于选择x = n / 2 − k x=n/2−kx=n/2k个“非3 33倍数位置”放3倍数数、同时选x xx个“3 33倍数位置”放非3 33倍数数(x < 0 x<0x<0则无合法解)。计算组合数C ( m , x ) × C ( k , x ) C(m,x)×C(k,x)C(m,x)×C(k,x),再乘以3 33倍数数的全排列f [ k ] f[k]f[k]、非3 33倍数数的全排列f [ m ] f[m]f[m],结果对1 e 9 + 7 1e9+71e9+7取模。预处理阶乘的时间复杂度O ( n ) O(n)O(n),组合数计算O ( 1 ) O(1)O(1),适配n ≤ 1 e 6 n≤1e6n1e6的规模,精准统计好排列的数量。

代码内容

#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;typedefunsignedlonglongull;typedefpair<ll,ll>pii;constll p=1e9+7;constll N=1e6+10;ll f[N],inf[N];llqp(ll a,ll b){ll res=1;while(b){if(b&1)res=res*a%p;a=a*a%p;b>>=1;}returnres;}voidinit(){f[0]=1;for(ll i=1;i<N;i++)f[i]=f[i-1]*i%p;inf[N-1]=qp(f[N-1],p-2);for(ll i=N-2;i>=0;i--)inf[i]=inf[i+1]*(i+1)%p;}llC(ll n,ll k){if(k<0||k>n)return0;returnf[n]*inf[k]%p*inf[n-k]%p;}intmain(){init();ll n;if(cin>>n){ll k=n/3;ll x=n/2-k;if(x<0){cout<<0<<endl;return0;}ll ans=C(n-k,x);ans=ans*C(k,x)%p;ans=ans*f[k]%p;ans=ans*f[n-k]%p;cout<<ans<<endl;}return0;}
http://www.jsqmd.com/news/330200/

相关文章:

  • 多模态RAG不是“加个图”那么简单:从解析到生成的全流程拆解
  • 洛谷 P2480 [SDOI2010] 古代猪文 题解
  • 百度智能云边缘云服务器,端云协同赋能全域智能场景
  • AI中国故事加篇-对话董仲舒—天人感应与AI伦理:大一统、教化系统与责任框架
  • ue metahuman 头发更换实战
  • 四大厂商云服务器安全创新对比,筑牢数字化转型安全底座
  • 主流中石化加油卡回收方式
  • No141:AI世间故事-对话黑格尔——辩证法与AI演化:绝对精神、否定之否定与历史理性
  • TRAE提示词技巧完全指南:6大场景助你高效开发
  • 短视频分享网站的设计与实现 (开题报告)
  • 大数据深度学习|计算机毕设项目|计算机毕设答辩|基于Django的京东智能家电销量数据分析系统设计与实现
  • 超市管理系统 盐城工学院开题报告
  • 超市管理系统的设计与实现 桂林理工大学 开题报告
  • 明明环境变量已经解密,为啥@ConfigurationProperties 注入还是加密值?
  • 电网缴费系统-开题报告
  • 死锁是怎么发生的,举个简单的例子
  • 学长亲荐 9 个降AIGC网站 千笔·专业降AI率智能体解决论文AI痕迹
  • 横评后发现 9个AI论文软件:继续教育必看!毕业论文+格式规范全攻略
  • 一篇搞定全流程AI论文网站,千笔 VS 灵感ai,MBA专属神器!
  • 救命神器10个降AI率平台推荐!千笔AI帮你轻松降AIGC
  • 冥想第一千七百八十一天(1781)
  • Java毕设项目推荐-基于springboot 网上鲜花销售系统基于springboot的攀枝花市鲜花销售系统【附源码+文档,调试定制服务】
  • 2026必备!10个降AIGC工具推荐,千笔·降AIGC助手助你轻松降AI率
  • 计算机Java毕设实战-基于springboot智能鲜花商店销售系统基于springboot的攀枝花市鲜花销售系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • Java毕设选题推荐:基于spring基于springboot的攀枝花市鲜花销售系统基于 SpringBoot 的鲜花电商与库存一体化运营平台 【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 课件2-1:列表(List)详解
  • 【课程设计/毕业设计】基于 SpringBoot 的鲜花电商与库存一体化运营平台 基于springboot的攀枝花市鲜花销售系统【附源码、数据库、万字文档】
  • 【计算机毕业设计案例】基于springboot的攀枝花市鲜花销售系统基于java+springboot+vue+mysql的攀枝花市鲜花销售系统(程序+文档+讲解+定制)
  • 课件1-3:Python输入输出
  • Java计算机毕设之基于java+springboot+vue+mysql的攀枝花市鲜花销售系统基于springboot的攀枝花市鲜花销售系统(完整前后端代码+说明文档+LW,调试定制等)