考试的时候被T2卡了一年。。。。考虑了一下正解的式子,然后没去给左边分解因数,去给后面乘倍数。。。理论复杂度O(n^2),实际好像卡不掉的样子。但是由于我智障的打了一棵主席树,他M了。。。。

预计得分100+??+20,实际得分100+70+20

T3,

  这道题dp式子想一想就出来了,但是由于模数不保证质数,如果用组合数要exlucas,其实可以不用组合数,但是由于我过于智障,还是打了组合数打法,但是由于我不会懒得打ex,于是我们可以。。。。。分解质因数。。。。。

  首先求出1到m每个数的质因子,然后对于组合数分解成质因数相乘的形式,如果每求一个组合数都暴力将所有质因子乘一遍的话,显然会死,考虑优化:

  从当前组合数递推到下一个质组合数只需要乘一个数,再除掉一个数,我们观察到除掉的那个数必然<5000,于是我们可以每次将小于5000的质因子暴力乘一遍,再乘上大于5000的质因子的乘积,那么复杂度就对了。

  注意在求每个数的质因子时,我们不需要每个数O(sqrt(n))求,可以在线筛的同时处理出来,具体来说,i×pri的质因子一定只比i多一个pri,我们可以记录每个数的前趋是谁,这样复杂度O(n),也可以直接让乘积继承i的vector,复杂度和埃氏筛一样,为O(nloglogn),都是可以接受的。

代码比exlucas短,效率也快很多(虽然不如不用组合数)

 #include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,m,p,pri[],tot,mx,a[];
vector<int>h[];
char v[];
ll num[][],f[][],c[],aa=,sum[];
inline int read(int x=,char ch=getchar()){
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<='')x=x*-+ch,ch=getchar();
return x;
}
inline ll qpow(ll x,ll y,ll ans=){
for(;y;y>>=,x=x*x%p)
if(y&)
ans=ans*x%p;
return ans;
}
signed main(){
scanf("%d%d%d",&n,&m,&p);
for(int i=;i<=n;i++) a[i]=read(),mx=max(mx,a[i]);
for(int i=;i<=m;i++){
if(!v[i]) pri[++tot]=i,h[i].push_back(i);
for(int j=;j<=tot&&i*pri[j]<=m;j++){
v[i*pri[j]]=true;
h[i*pri[j]]=h[i];
h[i*pri[j]].push_back(pri[j]);
if(i%pri[j]==) break;
}
}
for(int j=;j<h[m].size();j++){
if(h[m][j]>)aa=aa*h[m][j]%p;
else sum[h[m][j]]++;
}
for(int i=;i<=min(mx,m);i++){
c[i]=aa;
for(int j=;j<=tot&&pri[j]<=;j++)
c[i]=c[i]*qpow(pri[j],sum[pri[j]])%p;
if(i!=min(mx,m)){
for(int j=;j<h[i+].size();j++)
sum[h[i+][j]]--;
for(int j=;j<h[m-i].size();j++)
if(h[m-i][j]>)aa=aa*h[m-i][j]%p;
else sum[h[m-i][j]]++;
}
}
num[][]=;
for(int i=;i<=mx;i++)
for(int j=;j<=min(mx,m);j++)
num[i][j]=(num[i-][j-]*j+num[i-][j]*(j-))%p;
for(int i=;i<=min(a[],m);i++)
f[][i]=num[a[]][i]*c[i]%p,sum[]=(sum[]+f[][i])%p;
for(int i=;i<=n;i++){
sum[i]=;
for(int j=;j<=min(a[i],m);j++){
f[i&][j]=((sum[i-]*num[a[i]][j]%p*c[j]-(j<=a[i-])*f[(i-)&][j]*num[a[i]][j])%p+p)%p;
sum[i]=(sum[i]+f[i&][j])%p;
}
}
printf("%lld\n",sum[n]);
return ;
}

NOIP模拟34的更多相关文章

  1. noip模拟34[惨败]

    noip模拟34 solutions 我从来不为失败找借口,因为败了就是败了,没人听你诉说任何事情 今天很伤感,以来考试没考好,二来改题改半天也改不出来 这次算是炸出来了我经常范的一些错误,比如除以0 ...

  2. Noip模拟34 2021.8.9

    T1 Merchant 一眼二分,然后想了想维护凸包,好像并没有什么关系, 然后又想了想维护一个栈,发现跳指针细节过多不想打 最后直接打了二分,大点跑的飞快,感觉比较稳,出来$78$分 是没用神奇的$ ...

  3. 2021.8.9考试总结[NOIP模拟34]

    T1 Merchant 如果$t=0$时不能达到$s$,那么所拿物品的价值一定关于时间单调递增,答案单调.因此可以特判$0$后二分. 用$sort$复杂度被卡,要用$\textit{nth_eleme ...

  4. NOIP模拟 34

    次芝麻,喝喝喝,长寿花! 什么鬼畜题面...一看就不是什么正经出题人 skyh双双双AK了..太巨了... T1 次芝麻 稍稍手玩就能发现分界点以一个优美的方式跳动 然后就愉快地帮次货们次掉了这个题- ...

  5. NOIP 模拟 $34\; \rm Rectangle$

    题解 \(by\;zj\varphi\) 对于没有在同一行或同一列的情况,直接枚举右边界,左边界从大到小,用树状数组维护上下边界即可. 而对于有多个在一列或一行的情况,这些点将左右分成了几个区间,枚举 ...

  6. NOIP 模拟 $34\; \rm Equation$

    题解 \(by\;zj\varphi\) 发现每个点的权值都可以表示成 \(\rm k\pm x\). 那么对于新增的方程,\(\rm x_u+x_v=k\pm x/0\) 且 \(\rm x_u+x ...

  7. NOIP 模拟 $34\; \rm Merchant$

    题解 \(by\;zj\varphi\) 对于选的物品,总值一定有在前一段区间递减,后一段递增的性质,那么就可以二分. check()时只递归归并大的一段,用nth_element即可 Code #i ...

  8. NOIP模拟 1

    NOIP模拟1,到现在时间已经比较长了.. 那天是6.14,今天7.18了 //然鹅我看着最前边缺失的模拟1,还是终于忍不住把它补上,为了保持顺序2345重新发布了一遍.. #   用  户  名   ...

  9. NOIP模拟17.9.22

    NOIP模拟17.9.22 前进![问题描述]数轴的原点上有一只青蛙.青蛙要跳到数轴上≥

随机推荐

  1. Spring系列(六):Spring事务源码解析

    一.事务概述 1.1 什么是事务 事务是一组原子性的SQL查询,或者说是一个独立的工作单元.要么全部执行,要么全部不执行. 1.2 事务的特性(ACID) ①原子性(atomicity) 一个事务必须 ...

  2. C# 读取控制台的Console.Write

    一个程序去调用另一个xxx.exe的时候,需要记录下这个exe里面的console.write的输出 public static string InvokeExcute(string Command) ...

  3. redis主从配置 从而实现数据备份和读写分离

    首先打开cmd,用cd找到你的redis文件夹,我的操作是 在你的第一个redis客户端文件夹配置文件中,搜索port,找到如下位置 端口号设置为6379(默认的.后面一个,两个或者多个客户端分别修改 ...

  4. Fcitx使用搜狗词库与皮肤

    在 \(\text{Linux}\) 环境下,\(\text{Fcitx}\) 确实是最好用的开源输入法之一.然而 \(\text{Windows}\) 下的巨头输入法 -- 搜狗,对 \(\text ...

  5. Linux下格式化恢复USB启动优盘

    问题描述:优盘制作成启动盘安装操作系统,但是后边使用时发现无法格式化,提示 This partition cannot be modified because it contains a partit ...

  6. kafka-0.10.2.1:Producer生产时无法自动创建Topic

    集群环境: CenterOS 1台 Kafka:0.10.2.1版本. 今天在测试环境下,我们的Kafka集群工作不正常,具体现象为,使用confulentkafka向kafka集群生产消息失败,且并 ...

  7. python编程基础之二十二

    字典:字典属于可变对象,但是不属于序列,内部是通过哈希方式存储的,内部保存的是一个个键值对key:value 字典的键是唯一的, 字典查找速度比较快 d1 = {}  #括号里面用键值对表示 d2 = ...

  8. 【NOIP2011】选择客栈

    题文: 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从1 到n 编号.每家客栈都按照某一种色调进行装饰(总共k 种,用整数0 ~ k-1 表示),且每家客栈都设有一家咖啡店,每家咖啡店均有各自的 ...

  9. VPS虚拟专用服务器

    目录   0x00 VPS服务器概述 0x01 VPS工作原理 0x02 VPS用途 0x03 VPS优势 0x04 VPS特点 0x00 VPS服务器概述 VPS服务器(虚拟专用服务器)(" ...

  10. go-json类

    package main import ( "encoding/json" "fmt" ) /* { "company":"itc ...