题目描述

  有\(n\)个方案,编号为\(1\ldots n\)。

  最开始你不知道每个方案的编号。

  你要按顺序提出这些方案。

  每一个时刻你要做以下事情:

   如果你阅读过下一个方案,就提出这个方案。

   否则随机选一个你还没有阅读过的方案,然后阅读这份方案。如果这份方案是你马上要提出的方案,就提出这份方案,否则把这份方案放回到桌子上。

  问你期望耗时。对\(p^k\)取模。

  \(p\leq {10}^5,np^k\leq {10}^{18}\)

题解

  考虑你要在哪种方案上面浪费一个单位的时间,那就是你选择的方案是你下一个要提出的方案。

  显然你会在其他方案上面浪费两个单位的时间。

  设\(f_i\)为还有\(i\)个未阅读的方案,提出所有方案需要的时间。
\[ \begin{align} f_n&=f_{n-1}+\frac{1}{n}+2\frac{n-1}{n}\\ f_n&=2n-\sum_{i=1}^n\frac{1}{i} \end{align} \]
  然后直接套用这题的做法就行了。

  时间复杂度:\(O(pk\log_p n)\)

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef __int128 lll;
ll p;
ll mul(ll a,ll b,const ll &c)
{return (lll)a*b%c;
}
ll fp(ll a,ll b){ll s=1;for(;b;b>>=1,a*=a)if(b&1)s*=a;return s;}
ll fp(ll a,ll b,const ll &c){ll s=1;for(;b;b>>=1,a=mul(a,a,c))if(b&1)s=mul(s,a,c);return s;}
int pri[1000010];
int b[1000010];
ll pw[1000010];
int cnt;
ll ss[100][100];
void getstirling(ll k,const ll &md)
{ss[0][0]=1;for(int i=1;i<=k;i++)for(int j=1;j<=i;j++)ss[i][j]=(ss[i-1][j-1]-mul(i-1,ss[i-1][j],md))%md;
}
ll gao(ll n,ll k,const ll &md)
{ll s=(n+1)/(k+1);ll v=s*(k+1);for(ll i=n+1;i>=n-k+1;i--)s=mul(s,(i==v?1:i),md);return s;
}
void gets(ll *s,ll n,ll k,const ll &md)
{s[0]=n;for(int i=1;i<=k;i++){s[i]=gao(n,i,md);for(int j=0;j<i;j++)s[i]=(s[i]-mul(ss[i][j],s[j],md))%md;}s[0]++;
}
ll s1[100];
ll s2[100];
ll g(ll n,const ll &md,ll k)
{ll r=n%p;getstirling(k,md);gets(s1,n/p-1,k,md);gets(s2,n/p,k,md);ll res=0,s;ll t=fp(p,k)-fp(p,k-1)-1;for(int i=0;i<k;i++){s=0;pw[1]=1;cnt=0;for(int j=1;j<p;j++)b[j]=0;for(int j=2;j<p;j++){if(!b[j]){pri[++cnt]=j;pw[j]=fp(fp(j,i+1),t,md);}for(int k=1;k<=cnt&&j*pri[k]<p;k++){b[j*pri[k]]=1;pw[j*pri[k]]=mul(pw[j],pw[pri[k]],md);if(j%pri[k]==0)break;}}for(int j=1;j<p;j++)if(j<=r)s=(s+mul(s2[i],pw[j],md))%md;elses=(s+mul(s1[i],pw[j],md))%md;s=mul(s*(i&1?-1:1),fp(p,i),md);res=(res+s)%md;}
//  fprintf(stderr,"G(%lld, %lld) = %lld\n",n,md,(res+md)%md);return res;
}
ll f(ll n,const ll &md,ll k)
{if(!n)return 0;return (g(n,md,k)+f(n/p,md*p,k+1)/p)%md;
}
int main()
{
#ifndef ONLINE_JUDGEfreopen("c.in","r",stdin);freopen("c.out","w",stdout);
#endifll n,k;scanf("%lld%lld%lld",&p,&k,&n);const ll md=fp(p,k);ll ans=f(n,md,k);ans=(2*n-ans)%md;ans=(ans+md)%md;printf("%lld\n",ans);return 0;
}

转载于:https://www.cnblogs.com/ywwyww/p/8678419.html

【XSY2808】董先生的休闲方案 组合数学相关推荐

  1. IPTV系统工业园区职工宿舍电视娱乐休闲方案

    工业园区剧集的人员比较多,虽然生活比较方便,但是离市区一般也比较远,娱乐相对来说要少一些,而视频是很多人员休闲时间的主要方式,而给员工提供一些自办的园区或者集团直播节目,不仅仅可以丰富员工的生活还能增 ...

  2. 2022爱分析・时尚品牌数字化实践报告

    报告编委 特别鸣谢(按拼音排序) 报告摘要 商品.营销两端发力,时尚品牌数字化正当时 经济发展.科技进步,再叠加上疫情因素,对包括鞋服.饰品.美妆在内的整个时尚行业及消费者消费方式造成了颠覆式的影响. ...

  3. 【组合数学】生成函数 ( 正整数拆分 | 重复有序拆分 | 不重复有序拆分 | 重复有序拆分方案数证明 )

    文章目录 一.重复有序拆分 二.不重复有序拆分 1.无序拆分基本模型 2.全排列 三.重复有序拆分方案数证明 参考博客 : 按照顺序看 [组合数学]生成函数 简要介绍 ( 生成函数定义 | 牛顿二项式 ...

  4. 海外休闲游戏的网络连接方案

    由于项目开始沿用了公司其它项目组的TCP长链接网络框架,在实际上线测试中遇到了很多问题.最主要的是不同国家的网络情况不同,经常有玩家因为登录不了游戏而打差评.因此对网络连接方案作出如下整理. 长链接: ...

  5. 牛客练习赛20 A-礼物(组合数学 or 完全背包求方案数)

    题目链接:https://ac.nowcoder.com/acm/contest/128/A?&headNav=www 题目描述 如果不想读故事的話,可以直接跳到最后一段...     大一开 ...

  6. YBTOJ:数列方案(组合数学)

    文章目录 题目描述 解析 代码 题目描述 解析 如果它不取等,那就和方程的解这道题一样了,但有了等号就很头疼 如何把等号去掉呢? 定义Bi=Ai+iB~i~=A~i~+iB i =A i +i那么我们 ...

  7. android view设置按钮颜色_Android 主题换肤技术方案分析

    写在前面 Android TV 电视开发,主题换肤,我感觉有两种层级的方式,一种是 系统级,另一种 是应用级, 我记得很早在 Linux 桌面开发的时候,我们之前的公司在GTK+上也实现了一套换肤UI ...

  8. 一周AI看点 | 董明珠投资150亿洛阳造机器人 北京首条无人驾驶地铁线空载试运行

    本期一周AI看点包括行业新闻.技术应用.技术前沿.行业观点以及投融资等方面. 行业 联想设立1亿元种子基金,扶持大学生AI创业 日前,联想公司宣布拿出1亿元人民币建立种子基金,将用于AI人才培养工作. ...

  9. 董小姐的空调不一定能当发电站,但牛放屁确实可以发电

    梦晨 萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI "我们现在让空调成为一个发电站,晚上照明不花一分钱!" 说这话的不是别人,正是格力董事长董明珠. 她声称,要是这项 ...

最新文章

  1. iptables-save和iptables-restore
  2. Intelij IDEA注册码生成代码
  3. 第十五届全国大学生智能汽车竞赛各分赛区成绩汇总
  4. linux内核线程创建销毁机制
  5. Spring Boot 2.x基础教程:JSR-303实现请求参数校验
  6. vscode快捷键大全
  7. 鼠标滚轮事件绑定的兼容性问题
  8. antdesignvue upload vue3个人笔记待更新
  9. (需要大神,请求解决,遇见runtime error 错误)poj 1009 java
  10. (转)限制字符长度及特殊符号不能输入
  11. APP 代码提交GitHub: 提交、合并与冲突解决 (终端操作语法)
  12. java工厂模式应用场景_详解Java设计模式之《简单工厂模式》
  13. 【机器学习】分类决策树基本介绍+代码实现
  14. 模块[camera]_摄影基础知识: 曝光补偿完全指南
  15. 2022-2028年中国抽水蓄能电站设备制造行业市场竞争态势及发展趋向分析报告
  16. [Azure] 取消 或 删除Azure云订阅服务
  17. python爬虫基础详细教程
  18. 51单片机74HC595级联测试proteus
  19. UESTC 1593 老司机破阵 优先队列+双端链表
  20. Android 拍身份证(自定义相机)

热门文章

  1. 线性方程组之二:三元一次方程组
  2. 艺赛旗RPA 第三方库系列(一):如何调用 Python 第三方库
  3. 省考面试90+经验贴倾情奉献
  4. 【Machine Learning, Coursera】机器学习Week6 偏斜数据集的处理
  5. 把一个用阿拉伯数字表示的正整数转换成汉字大写表示
  6. java 邮件 客户端_JAVA编写ESMTP客户端发送邮件代码
  7. 屏蔽ip段访问 html,限制某IP段对网页的访问(ASP)
  8. 基于auto.js微信点赞
  9. 7-1 计算π的值 (10分)_PTA_Java基础练习
  10. 不平等博弈_不平等与全球性大流行:完美的风暴?