题目地址:https://nanti.jisuanke.com/t/41412

题目:


2≤n≤3000,求满足的排列的数目

解题思路:


通过简单的打表(n≤10),可以确定≤n,且必定存在的一个排列为,所以乘积最大为2n。

多重集合排列公式:,其实表示每个数重复的次数,n是数字的总数。

dfs枚举2~3000每个数字在整个序列中出现的次数(2*3000中最多有13个2,所以每个数字出现的次数很小),总出现次数记为num,乘积为mul,和为sum,那么满足题目要求的序列中1出现的次数num1=mul-sum,且只有当num1≥0&&num1+num≤3000时才能确定一个满足条件的序列, 该序列的n=num1+num,再利用多重集合排列公式求的排列数。

注意:排列式是除法的形式,会存在取模后分母大于分子的情况,需要用到逆元

ac代码:


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 1e9+7;
const ll maxn = 3005;
int t, n;
ll f[maxn], INV[maxn], ans[maxn];
ll qpow(ll a, ll b)
{ll ans = 1;a = a % mod;while(b){if(b&1) ans = ans * a % mod;a = a*a % mod;b >>= 1;}return ans;
}
bool dfs(ll x, ll mul, ll sum, ll num, ll inv)//num:非1的位数
{if(x==1){ll num1 = mul - sum;if(num1 >= 0 && num+num1 <= 3000){ans[num+num1] = (ans[num+num1] + ((f[num+num1]*inv)%mod * INV[num1])%mod)%mod;return true;}else return false;}dfs(x-1, mul, sum, num, inv);//无xfor(int i = 1; mul*pow(x,i) <= 2*3000; i++)//6000最多2^13{bool flag = dfs(x-1, mul*pow(x,i), sum+x*i, num+i, INV[i]*inv%mod);//i是x出现的次数if(!flag) break;}return true;
}
int main()
{//freopen("/Users/zhangkanqi/Desktop/11.txt","r",stdin);f[0] = 1;for(int i = 1; i <= 3000; i++) f[i] = f[i-1] * i % mod;for(int i = 0; i <= 3000; i++) INV[i] = qpow(f[i], mod-2);//逆元,个数可能为0,也要处理INV[0]dfs(3000, 1, 0, 0, 1);scanf("%d", &t);while(t--){scanf("%d", &n);printf("%lld\n", ans[n]);}return 0;
}

【2019上海网络赛:D】Counting Sequences I(dfs+多重集合排列)相关推荐

  1. 2019 ACM - ICPC 上海网络赛 E. Counting Sequences II (指数型生成函数)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  2. 2019上海网络赛icpc

    B. Light bulbs: 思路:对前端点排序,然后取前两个区间进行分析,分别为L1,R1,L2,R2.分L1==L2,R1<L2,R1>=L2,L1<L2&&R ...

  3. 2019上海网络赛 C Triple

    链接:Triple - 题库 - 计蒜客 题意:给定三个长度 n 的数组 a , b , c ,求有多少个(i,j,k)满足 ai , bi , ci 三个数构成不严格三角形(可以是直线) 分析:FF ...

  4. 2019徐州网络赛G

    2019徐州网络赛G 题意 给定s字符串,定义一个回文串的价值是这个回文串中不同字母的个数,求s中所有回文串的价值之和. 思路 马拉车加序列自动机. 代码 #include<bits/stdc+ ...

  5. ICPC 2019 徐州网络赛

    ICPC 2019 徐州网络赛 比赛时间:2019.9.7 比赛链接:The Preliminary Contest for ICPC Asia Xuzhou 2019 赛后的经验总结 // 比赛完才 ...

  6. 【2019.09.15】2019icpc上海网络赛

    题目地址:https://www.jisuanke.com/contest/3003?view=challenges A: B: C: D: E: F: G: H: I: J: K: L: 转载于:h ...

  7. Peekaboo(2019年上海网络赛K题+圆上整点)

    目录 题目链接 题意 思路 代码 题目链接 传送门 题意 你的位置在\(O(0,0)\),\(A\)的位置为\((x_1,y_1)\),\(B\)的位置为\((x_2,y_2)\),现在已知\(a=O ...

  8. 2019 ICPC 上海网络赛 K. Peekaboo

    题目连接:https://nanti.jisuanke.com/t/41421 题意:给定三个整数a, b, c,求半径为a.b,圆心坐标为原点的两个同心圆上的整点间的距离为c的点对 题解:推一下圆上 ...

  9. 2019南昌网络赛 C题,Hello 2019

    题意:求包含9012,但是不包含8012的最小删除次数 解题思路:首先将字符串反转,按照题解思路为线段树维护矩阵即可 我们将线段树的每个区间用矩阵表示,矩阵mat[5][5]维护2019这个序列的情况 ...

  10. 2019 南昌网络赛D FFT多个多项式相乘

    2019 Asia Nanchang D. Interesting Series 链接:https://nanti.jisuanke.com/t/41351 题意:首先题目给了若干定义 定义:Fn=( ...

最新文章

  1. iOS weak 自动置为nil的实现
  2. 分享超酷的添加图片悬浮特效jQuery插件 - Adipoli
  3. win7打开计算机死机,怎么样解决Win7系统运行程序引起的死机问题
  4. PopupWindow在项目中的使用 并指定位置及加入动画效果
  5. 贪心算法——Huffman 压缩编码的实现
  6. 京东拼多多全面封杀电子烟,淘宝仍正常销售...
  7. .NET Core:通过Web API进行微服务交互
  8. 真正想创业,做一番事业的人是什么样子的?
  9. java.lang.stringind_为什么越界了? java.lang.StringIndexOutOfBoundsException
  10. 怎么用proteus软件仿真单片机程序?
  11. SysLoad3.exe木马病毒地分析及清除方法
  12. 共享文件 麒麟系统_分享中标麒麟系统的安装教程
  13. SQL : INSTEAD OF触发器的工作过程
  14. C语言-编写函数isprime(int a),用来判断自变量a是否为素数。若是素数,函数返回整数1,否则返回0。
  15. mysql经典sql语句大全_经典SQL语句大全(sql查询语句大全集锦)
  16. 【毕业设计】基于SSM实现酒店管理系统(论文+源码+ppt+视频)
  17. python 画三角函数_Python计算三角函数之asin()方法的使用
  18. 牛客SQL22--- 统计各个部门的工资记录数
  19. log4j.properties详解
  20. 求素数(质数)的方法

热门文章

  1. 机房走线槽安装现场需要检查的内容
  2. 高校教材:计算机网络技术与应用,《网络技术与应用》计算机网络-教材-高等学校.pdf...
  3. 使用axis的工具类 wsdl2java生成java代码,利用CXF wsdl2java生成java代码以及施用Apache Axis 1.4 wsdl2java生成java代码...
  4. 【问题解决】c.a.c.n.c.NacosPropertySourceBuilder : parse data from Nacos error,dataId:xxxxxx.yml
  5. Linux环境安装PostgreSQL-12.2
  6. 计算机如何快速访问文件夹,高手教你如何快速定位文件夹(图文介绍)
  7. oracle sql 查询无数据_信运大讲堂丨ORACLE数据库SQL和索引
  8. centos wget默认路径_TRMM 数据windows平台wget下载方法(2021年1月13日可用)
  9. Quartz.NET 学习相关博客
  10. 在WPF中自定义控件(1)