Luogu P4593 [TJOI2018]教科书般的亵渎
亵渎终于离开标准了,然而铺场快攻也变少了
给一个大力枚举(无任何性质)+艹出自然数幂和的方法,但是复杂度极限是\(O(k^4)\)的,不过跑的好快233
首先简单数学分析可以得出\(k=m+1\),因为每多一个空缺就会打断一张亵渎的连击
那么我们考虑对于每个空缺求出答案,发现此时所求答案必定为一段自然数幂和并且减去空缺的数字幂
发现数据范围\(m\le 50\),那么我们直接暴力求出所有连续的段,然后大力枚举这一段开始最低的怪的血量
空缺不妨暴力枚举,区间内的自然数幂和直接差分一下,那么我们只要能快速求出\(S(n)=\sum_{i=1}^n i^k\)即可
这里用了第二类斯特林数的推法,\(S(n)=\sum_{i=1}^n i^k=\sum_{i=0}^n i^k\)
\]
\]
\]
用归纳法,得\(\sum_{i=0}^n C_i^j=C_{n+1}^{j+1}\),所以上式
\]
\]
所以我们预处理出组合数和第二类斯特林数,这部分就是\(O(k^2)\)计算的
因此总复杂度上界为\(O(k^4)\),实际在\(O(k^3)\)左右(空缺不连续)
CODE
#include<cstdio>
#include<map>
#include<algorithm>
#define RI register int
#define CI const int&
using namespace std;
typedef long long LL;
const int N=55,mod=1e9+7;
int t,n,m,ans,cnt,pfx[N],s[N][N]; LL a[N],pos[N]; map <LL,int> ts;
inline void inc(int& x,CI y)
{
if ((x+=y)>=mod) x-=mod;
}
inline void dec(int& x,CI y)
{
if ((x-=y)<0) x+=mod;
}
inline void Stirling_init(CI n)
{
s[0][0]=1; for (RI i=1;i<=n;++i) for (RI j=1;j<=i;++j)
s[i][j]=s[i-1][j-1],inc(s[i][j],1LL*j*s[i-1][j]%mod);
}
inline int quick_pow(int x,int p=mod-2,int mul=1)
{
for (;p;p>>=1,x=1LL*x*x%mod) if (p&1) mul=1LL*mul*x%mod; return mul;
}
inline int low_fact(const LL& x,CI t,int ret=1)
{
for (RI i=1;i<=t;++i) ret=1LL*ret*(x-i+1)%mod; return ret;
}
inline int pow_sum(const LL& x,CI k,int ret=0)
{
for (RI i=1;i<=k;++i) inc(ret,1LL*s[k][i]*low_fact(x+1,i+1)%mod*quick_pow(i+1)%mod); return ret;
}
inline int calc(CI x,const LL& y,CI k)
{
int ret=pow_sum(y,k); dec(ret,pow_sum(x-1,k)); return ret;
}
inline int none_sum(CI st,const LL& lim,CI k,int ret=0)
{
for (RI i=1;i<=m;++i) if (a[i]>=lim) inc(ret,quick_pow(st+a[i]-lim,k)); return ret;
}
int main()
{
for (scanf("%d",&t);t;--t)
{
RI i,j; for (ts.clear(),scanf("%d%d",&n,&m),i=1;i<=m;++i) scanf("%lld",&a[i]),ts[a[i]]=1;
for (sort(a+1,a+m+1),pos[cnt=i=1]=pfx[1]=1;i<=m;++i) if (a[i]!=n)
if (ts.count(a[i]+1)) ts[a[i]+1]+=ts[a[i]]; else pos[++cnt]=a[i]+1,pfx[cnt]=ts[a[i]];
for (ans=0,Stirling_init(m+1),i=1;i<=cnt;++i) for (j=1;j<=pfx[i];++j)
inc(ans,calc(j,j+n-pos[i],m+1)),dec(ans,none_sum(j,pos[i],m+1)); printf("%d\n",ans);
}
return 0;
}
Luogu P4593 [TJOI2018]教科书般的亵渎的更多相关文章
- 洛谷 P4593 [TJOI2018]教科书般的亵渎
洛谷 P4593 [TJOI2018]教科书般的亵渎 神仙伯努利数...网上一堆关于伯努利数的东西但是没有证明,所以只好记结论了? 题目本质要求\(\sum_{i=1}^{n}i^k\) 伯努利数,\ ...
- 洛谷P4593 [TJOI2018]教科书般的亵渎 【数学】
题目链接 洛谷P4593 题解 orz dalao upd:经典的自然数幂和,伯努利数裸题 由题我们只需模拟出代价,只需使用\(S(n,k) = \sum\limits_{i = 1}^{n} i^{ ...
- P4593 [TJOI2018]教科书般的亵渎(拉格朗日插值)
传送门 首先所有亵渎的张数\(k=m+1\),我们考虑每一次使用亵渎,都是一堆\(i^k\)之和减去那几个没有出现过的\(j^k\),对于没有出现过的我们可以直接快速幂处理并减去,所以现在的问题就是如 ...
- 洛谷P4593 [TJOI2018]教科书般的亵渎
小豆喜欢玩游戏,现在他在玩一个游戏遇到这样的场面,每个怪的血量为\(a_i\),且每个怪物血量均不相同,小豆手里有无限张"亵渎".亵渎的效果是对所有的怪造成\(1\)点伤害,如果 ...
- 并不对劲的复健训练-bzoj5339:loj2578:p4593:[TJOI2018]教科书般的亵渎
题目大意 题目链接 题解 先将\(a\)排序. \(k\)看上去等于怪的血量连续段的个数,但是要注意当存在\(a_i+1=a_{i+1}\)时,虽然它们之间的连续段为空,但是还要算上:而当\(a_m= ...
- 洛谷P4593 [TJOI2018]教科书般的亵渎(拉格朗日插值)
题意 题目链接 Sol 打出暴力不难发现时间复杂度的瓶颈在于求\(\sum_{i = 1}^n i^k\) 老祖宗告诉我们,这东西是个\(k\)次多项式,插一插就行了 上面的是\(O(Tk^2)\)的 ...
- p4593 [TJOI2018]教科书般的亵渎
分析 我们发现$Ans = \sum_i \sum_j (j-p_i)^{m+1}$ 因此直接套用622f的方法即可 代码 #include<bits/stdc++.h> using na ...
- 【BZOJ5339】[TJOI2018]教科书般的亵渎(斯特林数)
[BZOJ5339][TJOI2018]教科书般的亵渎(斯特林数) 题面 BZOJ 洛谷 题解 显然交亵渎的次数是\(m+1\). 那么这题的本质就是让你求\(\sum_{i=1}^n i^{m+1} ...
- 洛谷 P4593 【[TJOI2018]教科书般的亵渎】
题目分析 一眼看上去就像是一个模拟题目,但是\(n\)的范围过大. 冷静分析一下发现难点在于如何快速求出幂和. 考虑使用伯努利数. \(B_0=1\) \(B_n=-\frac{1}{n+1}\sum ...
随机推荐
- TypeScript完全解读(26课时)_4.TypeScript完全解读-接口
4.TypeScript完全解读-接口 初始化tslint tslint --init:初始化完成后会生成tslint.json的文件 如果我们涉及到一些规则都会在这个rules里面进行配置 安装ts ...
- TypeScript完全解读(26课时)_18.Mixins混入
本节的代码在mixin.ts文件内 同时在index.ts内引入 混入就是把两个对象或者类的内容混合到一起,从而实现一些功能复用. 对象混入 js中对象的混入 先来看一个js中对象的混入的例子 首先定 ...
- Gym 100851E Easy Problemset (水题,模拟)
题意:给定 n 个裁判,然后每个都一些题目,现在要从每一个按顺序去选出 k 个题,并且这 k 个要按不递减顺序,如果没有,就用50补充. 析:就按他说的来,直接模拟就好. 代码如下: #pragma ...
- sql查询的时候,等于这两个的值得全部取出来
sql查询的时候 用or连接 ad.jqtype='人文历史' or ad.jqtype='名胜古迹'
- MFC中Radio Button使用方法
先为对话框加上2个radio button,分别是Radio1和Radio2. 问题1:如何让Radio1或者Radio2默认选上?如何知道哪个被选上了? 关键是选上,“默认”只要放在OnInitDi ...
- IT兄弟连 JavaWeb教程 EL表达式中的内置对象
EL语言定义了11个隐含对象,它们都是java.util.Map类型,网页制作者可通过它们来便捷地访问Web应用中的特定数据.表1对这11个隐含对象做了说明. 1 EL表达式中的内置对象 这11个隐 ...
- 反射记录点滴——Field
反射记录点滴 1. 反射获取类的属性 Class.getDeclareFileld(String name) 返回一个Filed对象,该对象反映此Class对象所表示的类或接口的指定已声明字段. Cl ...
- 编译出现No rule to make target `out/host/linux-x86/bin/aapt', needed by `out/target/common/obj/APPS/MyTv4_intermediates/src/R.stamp'问题
查找路径发现的确没有MyTv4_intermediates/src/R.stamp,这需要生成这个文件
- css margin padding 四个方向
margin 和padding虽然有四个单独的方向属性,如margin-left,padding-bottom等等. 但是可以用margin:2px 3px 4px 5px 四个参数的含义:上 ...
- bzoj1475:方格取数
传送门 最小割,这也是个经典题了,当初学最小割时没学会,这次算是理解了,首先二分图染色,将整个图分成黑色点和白色点,由于相邻的格子不能同时选,一个黑点一定对应四个白点,也就是我们只能选择这个黑点或者四 ...