[BZOJ2655] calc

题目链接

BZOJ:https://www.lydsy.com/JudgeOnline/problem.php?id=2655

Solution

\(f_i\)表示长度为\(i\)的序列个数,\(g_{i,x}\)表示含有\(x\)的序列个数,注意这里不考虑顺序,顺序答案直接乘\(n!\)就好了。

首先很显然可以得到:
\[ f_i=\frac{1}{n}\sum_{x=1}^{A}g_{i,x} \]
我们尝试向\(f_i\)中添加一个\(x\),可以得到:
\[ xf_i=xg_{i,x}+g_{i+1,x} \]
把这个式子变一下:
\[ g_{i,x}=xf_{i-1}-xg_{i-1,x} \]
注意到这是个递归的形式,可以得到:
\[ g_{n,x}=\sum_{i=1}^{n}(-1)^{i-1}x^if_{n-i} \]
根据第一个式子累和:
\[ f_n=\frac{1}{n}\sum_{i=1}^Ag_{n,x}=\frac{1}{n}\sum_{i=1}^{A}\sum_{j=1}^{n}(-1)^{j-1}i^{j}f_{n-j}=\frac{1}{n}\sum_{j=1}^{n}\left((-1)^{j-1}\sum_{i=1}^{A}i^j\right)f_{n-j} \]
注意中间是一个只和\(j\)有关的式子,我们可以插值做到\(O(n)\)算一次。

那么我们预处理中间,其他的爆算就好了,复杂度\(O(n^2)\)

注意我代码偷懒多了个\(\log\),但是不影响。

#include<bits/stdc++.h>
using namespace std;void read(int &x) {x=0;int f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-f;for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';x*=f;
}void print(int x) {if(x<0) putchar('-'),x=-x;if(!x) return ;print(x/10),putchar(x%10+48);
}
void write(int x) {if(!x) putchar('0');else print(x);putchar('\n');}#define lf double
#define ll long long #define pii pair<int,int >
#define vec vector<int >#define pb push_back
#define mp make_pair
#define fr first
#define sc second#define FOR(i,l,r) for(int i=l,i##_r=r;i<=i##_r;i++) const int maxn = 600+10;
const int inf = 1e9;
const lf eps = 1e-8;int g[maxn],f[maxn],y[maxn],mod,fac[maxn],ifac[maxn],inv[maxn],suf[maxn],pre[maxn];int qpow(int a,int x) {int res=1;for(;x;x>>=1,a=1ll*a*a%mod) if(x&1) res=1ll*res*a%mod;return res;
}int power_sum(int n,int k) {fac[0]=ifac[0]=1;k+=2;for(int i=1;i<=k;i++) y[i]=(y[i-1]+qpow(i,k-2))%mod;for(int i=1;i<=k;i++) fac[i]=1ll*fac[i-1]*i%mod,ifac[i]=qpow(fac[i],mod-2);pre[0]=1;for(int i=1;i<=k;i++) pre[i]=1ll*pre[i-1]*(n-i)%mod;suf[k+1]=1;for(int i=k;i;i--) suf[i]=1ll*suf[i+1]*(n-i)%mod;int res=0;for(int i=1;i<=k;i++) res=(res+1ll*(((k-i)&1)?-1:1)*y[i]*pre[i-1]%mod*suf[i+1]%mod*ifac[i-1]%mod*ifac[k-i]%mod)%mod;   return (res+mod)%mod;
}int A,n;int main() {read(A),read(n),read(mod);for(int i=0;i<=n;i++) g[i]=((i&1)?1:-1)*power_sum(A,i);f[0]=1;int t=1;for(int i=1;i<=n;i++) {for(int j=1;j<=i;j++)f[i]=(f[i]+1ll*g[j]*f[i-j])%mod;f[i]=1ll*f[i]*qpow(i,mod-2)%mod;t=1ll*t*i%mod;}write((1ll*f[n]*t%mod+mod)%mod);return 0;
}

转载于:https://www.cnblogs.com/hbyer/p/10890702.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/569399.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

npm搭建cli脚手架不成功

npm 装脚手架不成功&#xff0c;可以尝试删文件夹 C盘-users-administrator-AppData-Roaming 下面的 npm-cache即可

递归与栈的关系

递归与栈的关系&#xff1a; 可是为何执行了900多次就出错了呢&#xff1f;还说超过了最大递归深度现在&#xff0c;为什么要限制呢&#xff1f; 通俗来讲&#xff0c;是因为每个函数在调自己的时候还没有退出&#xff0c;占内存&#xff0c;多了肯定会导致内存崩溃。 本质上讲…

箭头函数用法

1.基本使用 2.参数和返回值 函数里只有一行代码 log没有返回值&#xff0c;所以是undefined 结果为 Hello Demo undefined 箭头函数&#xff1a; 在函数作为另外一个函数参数的时候&#xff0c;适合用箭头函数 3.箭头函数的this 返回值都是window 返回值&#xff0c;一…

Android源码分析(十一)-----Android源码中如何引用aar文件

一&#xff1a;aar文件如何引用 系统Settings中引用bidehelper-1.1.12.aar 文件为例 源码地址&#xff1a;packages/apps/Settings/Android.mk LOCAL_PATH: $(call my-dir) include $(CLEAR_VARS)LOCAL_SRC_FILES : \$(call all-logtags-files-under, src)LOCAL_MODULE : setti…

云计算值得学习吗?云计算开发技术与应用未来工作前景

云计算技术的工作前景本人非常看好&#xff0c;其实已经不是我自己看好的事了&#xff0c;而是现在本来就已经很好很火了&#xff0c;在云计算的基础上又存生出大量其他产业链&#xff0c;归根结底还是云计算是前有技术的综合体&#xff0c;一会儿总结&#xff0c;那么工作前景…

路由的导航守卫

全局导航守卫 打印一下to&#xff0c;看是啥 meta 元数据&#xff08;描述数据的数据&#xff09; 3、路由独享的守卫 保留状态 keep-alive 保持组件不要频繁进行创建和销毁 activated deactivated 只有被保存了状态&#xff0c;使用了keep-alive时才起作用 和正则…

优酷项目

本作业涵盖内容&#xff1a;线程池&#xff0c;锁机制&#xff0c;session验证机制&#xff0c;简易版orm&#xff0c;大文件md5校验&#xff0c;数据库操作 cookie&#xff0c;session&#xff0c;token 彻底理解cookie&#xff0c;session&#xff0c;token 客户端 客户端讲解…

promise基础学习记录

sync 同步 async 异步 链式调用 有reject情况&#xff0c;直接进行到catch

Vuex状态管理方式

backend 前端 frontend 后端 getters mutations参数&#xff0c;有参数的情况&#xff0c;称为负载payload 参数不是一个的话&#xff0c;传对象的形式 提交&#xff0c;一个是通过commit&#xff0c;另外一个是type 这种情况下&#xff0c;count是一个对象&#xf…

MySQL(二)

MySQL连接管理 mysql 命令 -u 用户名-p 密码 例子&#xff1a; mysql -uroot -poldboy123 -h ip mysql -uroot -poldboy123 -hlocalhost -P3306 例子&#xff1a;mysql -uroot -poldboy123 -h 10.0.0.52 -P 3308 例子&#xff1a;mysql -uroot -poldboy123 -h 10.0.0.52 -P 330…

axios网络模块封装

网络测试 httpbin.org 发送普通的请求 get请求可以直接拼到URL后面 也可以将参数放到params对象中 axios发送并发请求 spread可以把值展开 数组的解构 对象的解构 axios配置信息相关 原始信息 defaults全局配置 使用全局的axios和对应的配置在进行网络请求 常见的…

Docker持续集成与容器管理--系列教程

一 Docker简介 Docker介绍 Docker架构 二 Docker安装 Ubuntu Docker 安装 CentOS Docker 安装 Windows Docker 安装 MacOS Docker 安装 三 Docker使用 Docker Hello World Docker 容器使用 Docker 镜像使用 Docker 容器连接 四 Docker实例 Docker 安装 Nginx Docker 安装 MySQL…

Ubuntu 重置MySQL密码

1.重置密码的第一步就是跳过MySQL的密码认证过程&#xff0c;方法如下&#xff1a; vim /etc/my.cnf 在文档内搜索mysqld定位到[mysqld]文本段&#xff1a; /mysqld (在vim编辑状态下直接输入该命令可搜索文本内容)在[mysqld]后面任意一行添加“skip-grant-tables”用来跳过密…

margin padding 上下边框对内联元素span无效

<span> 和<code> 内联元素 设置上下边框如 margin-top margin-bottom padding-top padding-bottom&#xff0c;无效。 设置左右 margin-right margin-left padding-right padding-left&#xff0c;有效。 设置 display: inline-block 可以使上下边框生效

sendMessage 与 obtainMessage (sendToTarget)比较

我们平时在做到多线程问题的时候可能利用Handler去传递Message&#xff0c;其中&#xff0c;经常使用的就是1、new Handler().obtainMessage().sendToTarget();2、new Handler().sendMessage(new Message());第一种是直接传递what&#xff0c;obj等&#xff0c;msg的一些数据&a…

toFixed用法 四舍五入保留小数

Num.toFixed(aaa) 参数&#xff1a;其中&#xff0c;aaa 参数范围0~20&#xff0c;决定保留几位小数&#xff0c;默认是0 返回值&#xff1a; 返回数字的字符串形式 参考mdn https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixe…

MUI

跳转页面后刷新 首先在添加信息页面写上 mui.init({beforeback: function() {  //获得父页面的webviewvar list plus.webview.currentWebview().opener();  //触发父页面的自定义事件(refresh),从而进行刷新mui.fire(list, getDaily);//返回true,继续页面关闭逻辑return t…

图片vertical-align 属性,对齐文本

vertical-align: baseline top middle bottom

如何在报表中实现算法的可挂接需求

在报表项目中&#xff0c;有些报表中部分数据的计算方法会经常改变。例如&#xff1a;某企业员工的实际工资是通过绩效得分计算出的&#xff0c;而绩效的算法可能经常变动&#xff0c;需要在不改动其他代码的情况下用新算法替换旧算法。一般我们都会想到用 Java 来实现计算&…

【数据结构】字符串匹配|BF算法|KMP算法|next数组的优化

字符串匹配算法是在实际工程中经常遇到的问题&#xff0c;也是各大公司笔试面试的常考题目&#xff0c;本文主要介绍BF算法&#xff08;最好想到的算法&#xff0c;也最好实现&#xff09;和KMP算法&#xff08;最经典的&#xff09; 一、BF算法 BF算法&#xff0c;即暴力(Bru…