【NOIP模拟赛】随
题目链接:
172.18.111.252:800/problem.php?cid=1001&pid=0
题解:
膜达神……(NOIP考这个就等爆零吧……)
显然我们得到一个结论:$ans=\sum_{i=0}^{mod-1}i*f_{i}$,其中$f_{i}$表示结果为i的概率。
那么问题就是求$f_{i}$。
最初我们可以想到用暴力枚举所有状态,显然超时,怎么优化,矩阵dp。可以开一个$n^{2}$的矩阵来递推。但这样时间$n^{3}\log(n)$还是过不去。深入探讨,我们发现,给的mod是很小的,也就意味着可以把许多$a_{i}$合并概率,同时我们发现(题目下面提示),这原根似乎没用到。(⊙v⊙)嗯。
我们设$g$为原根,那么对于所有的$a_{i}$我们都可以用$g^{x}$来表示,然后结合欧拉定理,我们就可以到到一个新的递推式:$f_{i,j}=\sum_{x=0}^{mod-2}f_{i-1,x}*f_{i-1,j-x}$其中$f_{i,j}$表示i次选取后,结果为原根的j次幂的概率,$j-x$为其在mod-1意义下的剩余系。这个式子显然可以矩阵优化,同时我们发现这个矩阵是一个循环矩阵,然后我们就可以在$O(mod^{2}log(m))$的时间内求出答案。
#include <cstdio>
#include <cstring>
using namespace std;
const int mod=int(1e9)+,N=;
inline int read(){
int s=;char ch=getchar();
while(ch<''||ch>'') ch=getchar();
while(ch>=''&&ch<='') s=s*+(ch^),ch=getchar();
return s;
}
int n,m,P,P2;
int yuan(){
for(int i=;i<P;i++){
int x=;
bool flag=true;
for(int j=;j<P2;j++){
x=x*i%P;
if(x==){
flag=false;break;
}
}
if(flag) return i;
}
}
inline int powmod(int a,int b){
int ans=;
while(b){
if(b&) ans=1LL*ans*a%mod;
b>>=;
a=1LL*a*a%mod;
}return ans;
}
struct Matrix{
int a[N];
Matrix (){memset(a,,sizeof(a));}
}now,a;
Matrix t;
int pi[N],logs[N];
int cnt[N];
int main(){
n=read(),m=read(),P=read();P2=P-;
int rt=yuan(); int x=;
logs[]=;
pi[]=;
for(int i=;i<P2;i++){
x=1LL*x*rt%P;
pi[i]=x;
logs[x]=i;
}
for(int i=;i<=n;i++)
cnt[logs[read()]]++; int re=powmod(n,mod-);
for(int i=;i<P2;i++)
cnt[i]=1LL*cnt[i]*re%mod;
now.a[]=;
for(int i=;i<P2;i++)
a.a[i]=cnt[(P2-i)%P2];
while(m){
if(m&) {
for(int i=;i<P2;i++){
t.a[i]=;
for(int j=;j<P2;j++)
t.a[i]=(1LL*t.a[i]+1LL*now.a[j]*a.a[(i-j+P2)%P2])%mod;
}
now=t;
}
m>>=;
for(int i=;i<P2;i++){
t.a[i]=;
for(int j=;j<P2;j++)
t.a[i]=(1LL*t.a[i]+1LL*a.a[j]*a.a[(i-j+P2)%P2])%mod;
}
a=t;
}
int ans=;
for(int i=;i<P2;i++){
ans=(ans*1LL+pi[i]*1LL*now.a[(P2-i)%P2]%mod)%mod;
}
printf("%d\n",ans);
}
【NOIP模拟赛】随的更多相关文章
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...
- 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...
- 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...
- CH Round #58 - OrzCC杯noip模拟赛day2
A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...
- CH Round #52 - Thinking Bear #1 (NOIP模拟赛)
A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...
- CH Round #49 - Streaming #4 (NOIP模拟赛Day2)
A.二叉树的的根 题目:http://www.contesthunter.org/contest/CH%20Round%20%2349%20-%20Streaming%20%234%20(NOIP 模 ...
随机推荐
- RHEL7.0 Docker离线安装以及实战笔记
1.概述 最近在琢磨一个事--在RHEL 7.0系统上离线安装使用Docker.然后配置JAVAEE环境,发布Web服务.在网上查了资料,大多数是在线安装的,其他的要么是环境不同,要么资料包找不到了. ...
- Day9 进程理论 开启进程的两种方式 多进程实现并发套接字 join方法 Process对象的其他属性或者方法 守护进程 操作系统介绍
操作系统简介(转自林海峰老师博客介绍) #一 操作系统的作用: 1:隐藏丑陋复杂的硬件接口,提供良好的抽象接口 2:管理.调度进程,并且将多个进程对硬件的竞争变得有序 #二 多道技术: 1.产生背景: ...
- Python import this : The Zen of Python
>>> import thisThe Zen of Python, by Tim Peters Beautiful is better than ugly.Explicit is b ...
- Android Studio 插件开发详解二:工具类
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78112856 本文出自[赵彦军的博客] 在插件开发过程中,我们按照开发一个正式的项 ...
- Heap
#include using namespace std; int heap[100010],cnt=0; void put(int x) { cnt++; heap[cnt]=x; int now= ...
- Spring Cache 笔记
@(Java ThirdParty)[Spring Cache] Spring Cache Abstraction 简介 Spring Cache提供了对底层缓存使用的抽象,通过注解的方式使用缓存,减 ...
- java之Hibernate框架实现数据库操作
之前我们用一个java类连接MySQL数据库实现了数据库的增删改查操作---------MySQL篇: 但是数据库种类之多,除了MySQL,还有Access.Oracle.DB2等等,而且每种数据库语 ...
- python命令行使用的问题
python命令行使用的时候要注意一个陷阱,就是如果某个语句不是在>>>下执行的,而是在...下执行的,那么它可能没有执行成功. 例如如下没有成功,原因是上面有一句注释,导致没有执行 ...
- 虚拟机中克隆后使用eth0
1.修改主机名 vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=mini1 1.修改ip地址以及udev记录网络规则的脚本 在CentOS中,ude ...
- 论文笔记(2):A fast learning algorithm for deep belief nets.
论文笔记(2):A fast learning algorithm for deep belief nets. 这几天继续学习一篇论文,Hinton的A Fast Learning Algorithm ...