首页 > 其他分享 >CF1794D 题解

CF1794D 题解

时间:2023-05-07 21:55:28浏览次数:36  
标签:... 题解 ll CF1794D v1 base mod define

一、题目描述:

  一个正整数 $m$ 可以被唯一分解成 $p_1^{e_1} \times p_2^{e_2} \times ...\times p_k^{e_k}$ 的形式,其中 $p_1,p_2,...,p_k$为互不相同的质数,$e_1,e_2,...,e_k$ 为正整数。

  定义一个可重集 $f(m)$ 为 $\{p_1,e_1,p_2,e_2,...,p_k,e_k\}$ 。现在给定正整数 $n$ 和大小为 $2\times n$ 集合 $S$ ,求有多少个 $m$ 能使得 $f(m)=S$。

  由于答案可能很大,请对 $998$ $244$ $353$ 取模。数据范围:$1\leq n\leq 2022$。


 二、解题思路:

  思路不是我的,我是看一个同学的代码看懂的。

  其实比较容易想到要统计素数个数,合数个数,然后套组合数多重集的板子。

  但是方案数很多,甚至可能有 $2^n$ 种,所以我考场没做出来。

 

  说到方案数,其实是一个计数 $dp$,但我对 $dp$ 本来就一窍不通,所以没做出来也很正常。

  用一个类似背包的数组 $f_{i,j}$ 来表示状态,笼统一点理解:$f_{i,j}$ 表示选了前 $i$ 个数中的 $j$ 个数作底数的方案数。

  但实际上并不完全是这样,因为有一部分质数也有可能做质数,所以还乘了逆元。看代码就知道了。时间复杂度 $O(n^2)$。


三、完整代码:

 1 #include<iostream>
 2 #define N 4050
 3 #define M 1000010
 4 #define lim 1000000
 5 #define ll long long
 6 #define mod 998244353
 7 using namespace std;
 8 ll n,ans,cnt,ch,cp;
 9 ll a[N],p[N],h[N],s[M],f[N][N];
10 ll v1[M],v2[M],jc[M],inv[M],pri[M];
11 ll qsm(ll base,ll q)
12 {
13     ll res=1;
14     while(q)
15     {
16         if(q&1)    res*=base,res%=mod;
17         base*=base;base%=mod;q>>=1;
18     }
19     return res;
20 }
21 void pre_work()
22 {
23     v1[1]=jc[0]=1;
24     for(ll i=1;i<=lim;i++)
25         jc[i]=jc[i-1]*i%mod;
26     inv[lim]=qsm(jc[lim],mod-2);
27     for(ll i=lim-1;i>=0;i--)
28         inv[i]=inv[i+1]*(i+1)%mod;
29     for(ll i=2;i<=lim;i++) 
30     {
31         if(!v1[i]) pri[++cnt]=i;
32         for(ll j=1;j<=cnt;j++)
33         {
34             if(i*pri[j]>lim)
35                 break;
36             v1[i*pri[j]]=1;
37             if(i%pri[j]==0)
38                 break;
39         }
40     }
41 }
42 int main()
43 {
44     ios::sync_with_stdio(false);
45     cin.tie(0);cout.tie(0);
46     cin>>n;pre_work();
47     for(ll i=1;i<=n*2;i++)
48     {
49         cin>>a[i];s[a[i]]++; 
50         if(!v2[a[i]])
51         {
52             if(!v1[a[i]])    p[++cp]=a[i]; 
53             else            h[++ch]=a[i];
54             v2[a[i]]=1; 
55         }
56     }
57     for(ll i=0;i<=cp;i++)
58         f[i][0]=1;
59     for(ll i=1;i<=cp;i++)
60         for(ll j=0;j<=n;j++)
61         {
62             f[i][j]=f[i-1][j-1]*inv[s[p[i]]-1]%mod;
63             (f[i][j]+=f[i-1][j]*inv[s[p[i]]]%mod)%=mod;
64         }
65     ans=f[cp][n]*jc[n]%mod;
66     for(ll i=1;i<=ch;i++)
67         (ans*=inv[s[h[i]]])%=mod;
68     cout<<ans<<'\n';
69     return 0;
70 }

四、写题心得:

  感觉有关阶乘,逆元的题都特别有意思,虽然我大多数都不会。不过加油吧!拜拜!

标签:...,题解,ll,CF1794D,v1,base,mod,define
From: https://www.cnblogs.com/yhy-trh/p/CF1794D.html

相关文章

  • 51nod 1365 Fib(N) mod Fib(K)-题解
    51nod1365Fib(N)modFib(K)个人评价:考一些奇奇怪怪的知识点呢算法矩阵快速幂、斐波那契公式题面求\(F_n\%F_k\)的值,\(1\leqn,k\leq1e18\)问题分析我一开始居然想着直接矩阵快速幂求出两个值算,我也是真的牛……我们要知道这些斐波那契公式(考的真怪)\[F_{-n}=(-1)^{n......
  • 2023ccpc湖北省赛/2023 Hubei Provincial Collegiate Programming Contest个人题解
    2023HubeiProvincialCollegiateProgrammingContestAPrimeMagicWalkAlonehasasequence\(a_1,a_2,...,a_n\),andhecanuseamagiconit:Chooseanoddprimenumber\(p\)andaninterval\([l,r]⊆[1,n]\)satisfying\(r−l+1=p\),andthenadd......
  • MultiDex使用方法及由此导致的crash、ANR问题解决方案
    Android开发的朋友,如果是在开发一款中大型应用时,都会碰到这么一个问题,就是dex分拆问题,google给出的解决方案MultiDex。现象:有些APP本身功能比较多,再加上一些其它三方的SDK,慢慢的发现dex越来越大,直到有一天编译出现如下错误:Error:Thenumberofmethodreferencesina.dexfile......
  • 十二代酷睿处理器N100 N200 N305 等安装ESXI紫屏问题解决办法
    12代大小核紫屏报错解决方案四部曲1、安装界面倒计时结束之前,按SHIFT+O,在原有命令后面加空格后输入以下代码cpuUniformityHardCheckPanic=FALSE2、安装完ESXI之后会重启,在重启界面倒计时结束前,再操作一次,按住SHIFT+O,输入cpuUniformityHardCheckPanic=FALSE3、进入ESXI把SSH功能......
  • 力扣《环形链表Ⅱ》超详细题解
    作为经典题目的《环形链表Ⅱ》,我认为这题还是有专门出一期博客的分量的,大家也可以自己事先按照自己的理解写一写,然后再来看题解,毕竟自己悟出来的东西是比吸收别人的来的更深刻。一、题目给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。......
  • CF1829B 题解
    题目思路先定义变量\(t,ans\)。循环从\(0\)到\(n-1\),对于第\(i\)个数,如果为\(0\),\(t=t+1\),否则将\(t\)清零。每次循环\(ans=\max(ans,t)\)表示最多有多少个连续的\(0\)。最后输出\(ans\)即可。核心代码点击查看代码voidsolve(){intn=read(),a[1005],a......
  • AtCoder Regular Contest 159简要题解
    AtCoderRegularContest159传送门A-CopyandPasteGraph图的邻接矩阵为\[\left(\begin{matrix}A&A&\cdots&A\\A&A&\cdots&A\\\cdots&\cdots&\cdots&\cdots\\A&A&\cdots&A\e......
  • P8655 [蓝桥杯 2017 国 B] 发现环 题解
    题目概述题目传送门在一棵树中新增一条边,使得这个图产生一个环,求在环上的点。思路:拓补排序对于这道题显然不能生搬硬套拓补排序的模板。这道题中的图是一个无向图,而拓补排序却是处理有向图的一种思想。不难想到可以将无向图转化为有向图,即将对于每条无向边变换为双向建边,就......
  • ABC297F 题解
    容斥萌萌题给你一个\(H\timesW\)的棋盘,问在棋盘上随机撒\(k\)个点,能够围住这\(k\)个点的最小子矩形的期望面积考虑枚举子矩形可以直接转成计数问题转变为在\(n\timesm\)的矩形中撒\(k\)个点,有多少种方案使得四条边上均至少有一个点答案乘上矩形面积再除以所有撒点......
  • Mac M系列芯片 vue前端node-sass兼容问题解决
    0、由于M系列芯片是arm架构,在使用brew安装node时都是arm的node,但是[email protected]版本中不支持arm架构的出现如下报错:Error:NodeSassdoesnotyetsupportyourcurrentenvironment:OSXUnsupportedarchitecture(arm64)withUnsupportedruntime(88)Formoreinfor......