首页 > 其他分享 >「JXOI2018」游戏 解题报告

「JXOI2018」游戏 解题报告

时间:2022-08-15 19:46:57浏览次数:79  
标签:cnt 办公室 ll JXOI2018 可怜 解题 ans inv 游戏

[JXOI2018]游戏 传送门

题目背景

九条可怜是一个富有的女孩子。

题目描述

她长大以后创业了,开了一个公司。 但是管理公司是一个很累人的活,员工们经常背着可怜偷懒,可怜需要时不时对办公室进行检查。 可怜公司有 \(n\) 个办公室,办公室编号是 \(l\) 到 \(l+n-1\) ,可怜会事先制定一个顺序,按照这个顺序依次检查办公室。一开始的时候,所有办公室的员工都在偷懒,当她检查完编号是 \(i\) 的办公室时候,这个办公室的员工会认真工作,并且这个办公室的员工通知所有办公室编号是 \(i\) 的倍数的办公室,通知他们老板来了,让他们认真工作。因此,可怜检查完第 \(i\) 个办公室的时候,所有编号是 \(i\) 的倍数(包括 \(i\) )的办公室的员工会认真工作。 可怜发现了员工们通风报信的行为,她发现,对于每种不同的顺序 \(p\) ,都存在一个最小的 \(t(p)\) ,使得可怜按照这个顺序检查完前 \(t(p)\) 个办公室之后,所有的办公室都会开始认真工作。她把这个 \(t(p)\) 定义为 \(p\) 的检查时间。 可怜想知道所有 \(t(p)\) 的和。 但是这个结果可能很大,她想知道和对 \(10^9+7\) 取模后的结果。

输入输出格式

输入格式

第一行输入两个整数 \(l,r\) 表示编号范围,题目中的 \(n\) 就是 \(r-l+1\) 。

输出格式

一个整数,表示所有 \(t(p)\) 的和。

输入输出样例

输入样例

2 4

输出样例

16

solution

之前我就想到\(cnt\)个了

\(cnt\)最少需要的个数

但是我题意理解错了,我以为ta就是下标耶。。

结果是数,ta不是说的下标都嘛。。

然后后面就比较好想了

\[ans=\sum^{n}_{i=cnt}i×(i-1)!×cnt×A_{n-cnt}^{n-i} \]

就是遍历\(i=t(p)\)再乘上可能的方案数

由于\(t(p)\)是最后的,所以第\(t(p)\)个必须是\(cnt\)个关键字之一,方案数\(cnt\)

剩下的\(i-1\)个数排列为\((i-1)!\)

剩下后面的数排列\(A_{n-cnt}^{n-i}\)

总的方案数就是\((i-1)!×cnt×A_{n-cnt}^{n-i}\)

CODE

#include<bits/stdc++.h>
#define ll long long 
using namespace std;
const ll p=1e9+7,N=1e7+2;
ll l,r,cnt,vis[N],ans,n,fac[N],inv[N];
ll qpow(ll a,ll b){
	ll ans=1;
	while(b){
		if(b&1) ans=ans*a%p;
		a=a*a%p;
		b>>=1;
	}
	return ans;
}

ll A(ll n,ll m){
	return fac[n]*inv[n-m]%p;
}
int main(){
	scanf("%lld%lld",&l,&r);
	for(ll i=l;i<=r;i++){
		if(!vis[i]){
			cnt++;
			for(ll j=i;j<=r;j+=i){
				vis[j]=1;
			}
		}
	}
	n=r-l+1;
	fac[0]=1;
	for(ll i=1;i<=r;i++){
		fac[i]=fac[i-1]*i%p;
	}
	inv[r]=qpow(fac[r],p-2);
	for(ll i=r-1;i>=0;i--){
		inv[i]=inv[i+1]*(i+1)%p;
	}
	for(ll i=cnt;i<=n;i++){
		ans+=i%p*fac[i-1]%p*cnt%p*A(n-cnt,n-i)%p;
	}
	printf("%lld",ans%p);
	return 0;
}

完结撒花❀

★,°:.☆( ̄▽ ̄)/$:.°★

标签:cnt,办公室,ll,JXOI2018,可怜,解题,ans,inv,游戏
From: https://www.cnblogs.com/Aurora1217/p/16589416.html

相关文章

  • NC16645 [NOIP2007]矩阵取数游戏
    题目链接题目题目描述帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数。游戏规则如下:1.每次取数时须从每行各取走一个元素,......
  • NC14701 取数游戏2
    题目链接题目题目描述给定两个长度为n的整数列A和B,每次你可以从A数列的左端或右端取走一个数。假设第i次取走的数为ax,则第i次取走的数的价值vi=bi⋅ax,现在希望你求出∑v......
  • 第9天,8-14这几天开始玩游戏了,应该总结一下
    首先,我肯定错了。我想深究一下这里面错误的原因,那么可以不可以以后都不再犯?我觉得可以不再犯,但是能不能达到举一反三的地步? 我觉得理论上是可以的,但是现实中比较难,因为......
  • 【游戏开发基础知识】渲染篇
    什么是渲染管线?如何绘制3D物体?https://www.bilibili.com/video/BV1qY4y1V79z/?spm_id_from=333.788&vd_source=61ce3b4e97cb6ce7f80ca3f58607b5fb1、前期CPU需要为GPU准......
  • Solution -「NOI 2017」「洛谷 P3825」游戏
    \(\mathscr{Description}\)  Link.  给大家看个乐子:link,懒得概括题意啦.\(\mathscr{Solution}\)  对于没有X的情况,显然可以2-SAT;对于有X的情况,暴......
  • 汪子熙趣味成语接龙的游戏软件设计架构说明
    @目录背景战士阿短编程猫纸片初始化函数当开始被点击当收到广播“转盘停止”当收到广播“开始接龙”本作品采用Kitten编程猫v3.7.11开发而成。工程里主要包含一个背景......
  • 趣味成语接龙游戏里,如何判断用户输入的成语接龙成功?
    本文给出了一种解决方案,采用如下的kitten积木组合块实现。根据变量“检查接龙的返回值”,分别执行相应的逻辑。如果返回值为-1,说明用户输入的词语长度不为4.如果返回......
  • 汪子熙趣味成语接龙游戏的设计初衷
    我国的汉语博大精深,其中数以万计的四字成语更是汉语中一颗颗璀璨的明珠,凝聚着中华民族几千年文明的精华。从小接触这些成语,对于小学生积累语汇,提高文学素养,和学习文言文方......
  • 使用 Kitten 开发一款趣味成语接龙游戏
    每一轮接龙成功后,初始接龙和成功接龙的成语,都会显示在作品的接龙记录里,便于使用者学习和记忆。通过积分的方式,能激励用户开动脑筋,努力完成接龙。本作品极具智能和体贴性,如......
  • 汪子熙趣味接龙游戏实现里原创部分的亮点
    本作品使用Kitten编程猫这个具有国内自主知识产权的工具开发而成,工程里每一个积木的使用都是作者和原创。最值得一提的原创部分罗列如下:使用列表的数据结构来存储将近2......