news 2026/4/11 1:24:56

小红的好排列【牛客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/5 12:21:55

Java计算机毕设之基于SpringBoot的二手交易系统基于vue+springboot的二手交易平台(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/10 12:51:02

Java毕设选题推荐:基于SpringBoot的二手商品交易平台基于SpringBoot的二手交易系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/9 0:11:57

学长亲荐10个降AI率工具 千笔帮你轻松降AIGC

AI降重工具&#xff0c;让论文更自然 在当前学术写作中&#xff0c;AI生成内容的普及让许多同学面临一个共同难题——如何降低AIGC率&#xff0c;同时保持论文的逻辑性和语义通顺。尤其是对于本科生而言&#xff0c;论文不仅是对知识的总结&#xff0c;更是对个人能力的展示。…

作者头像 李华
网站建设 2026/4/3 6:10:15

怎么把C盘的文件移到D盘?c盘转移文件到d盘方法图文教程

电脑已经深入到我们生活的每一个角落&#xff0c;无论你是沉浸在游戏的世界中&#xff0c;还是忙于办公软件的操作&#xff0c;电脑都是离不开的。但是&#xff0c;电脑C盘的文件积累过多&#xff0c;如果不及时处理&#xff0c;很可能会出现空间不足的情况。那么&#xff0c;怎…

作者头像 李华
网站建设 2026/4/9 0:47:30

Java毕设项目推荐-基于SpringBoot实现的智慧就业管理系统基于springboot的大学就业信息管理系统企业信息管理、招聘信息管理【附源码+文档,调试定制服务】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华