news 2026/4/16 14:46:41

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
小红的好排列【牛客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;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 9:08:23

课件2-1:列表(List)详解

@TOC 课件2-1:列表(List)详解 1. 列表的创建和基本操作 1.1 什么是列表 列表(List)是Python中最常用的数据结构,它是一个有序、可变的集合,可以包含不同类型的元素。 # 列表的基本特性 # 1. 有序:元素按照插入顺序存储 # 2. 可变:可以修改、添加、删除元素 # 3. 可包…

作者头像 李华
网站建设 2026/4/16 9:09:00

【毕业设计】SpringBoot+Vue+MySQL Spring Boot企业员工薪酬关系系统平台源码+数据库+论文+部署文档

系统架构设计### 摘要 随着信息技术的快速发展&#xff0c;企业管理的数字化和智能化需求日益增长&#xff0c;薪酬管理作为企业人力资源管理的核心环节&#xff0c;传统的手工操作模式已无法满足现代企业对高效、精准和透明管理的需求。企业薪酬管理系统能够有效整合薪资计算、…

作者头像 李华
网站建设 2026/4/16 9:07:40

爱心捐助平台开题报告

目录 爱心捐助平台开题报告概述项目背景与意义平台核心功能技术方案创新点与难点预期成果参考文献与资料 项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作 爱心捐助平台开题报告概述 爱心捐助平台是一种基…

作者头像 李华