洛谷 P2768 珍珠项链

小L想要用不同种类的珍珠制作举世无双的项链,他想知道能组成多少种不同长度的珍珠项链。题目描述了输入输出格式,并指出需要考虑项链排列顺序和珍珠种类限制,求解过程涉及容斥原理、等比数列和快速幂等数学概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目背景

小L通过泥萌的帮助,成功解决了牛栏的修建问题。奶牛们觉得主人非常厉害,于是再也不敢偷懒,母牛们奋力挤奶,生娃。子子孙孙无穷匮也!小L于是成为了一代富豪!

但是一直困扰小L的就是单身问题!小L经过长久的寻觅,小L终于找到了一个心仪的漂亮妹子。于是,小L打算在520那天给妹子一个惊喜!(虽然小L很节约,但是对妹子还是很阔绰的!)

题目描述

小L决定用K种珍珠为妹子做一串举世无双的珍珠垂饰。珍珠垂饰是由珍珠连接而成的,其长度可以认为就是珍珠垂饰上珍珠的个数。小L现在腰缠万贯,每种珍珠他都拥有N颗。根据将珍珠垂饰打开后珍珠不同的排列顺序可以区别不同种类的项链。现在,小L好奇自己可以组成多少种长度为1至N的不同的珍珠垂饰?当然,为显富有,每串珍珠垂饰都要必须由K种珍珠连成。 答案取模1234567891。

这一定难不倒聪明的你吧!如果你能帮小L解决这个问题,也许他会把最后的资产分给你1/4哦!

输入输出格式

输入格式:

输入包含多组数据。第一行是一个整数T,表示测试数据的个数。每组数据占一行,包含两个整数N和K,用一个空格隔开。

输出格式:

每组数据输出仅一行,包含一个整数,表示项链的种类数。

输入输出样例

输入样例#1:
2
2 1
3 2
输出样例#1:
2
8

说明

40 % :1<= N<= 100000,  0<= K<= 30

100% :T <= 10, 1<= N<= 1000000000,  0<= K<= 30

70%-100%:时限10ms


卡题面:这不是一个环,是一条链。

考虑n长度的项链,总共有k^n种情况。

有哪些情况不满足要求呢?

首先有一种珍珠没有用到的有c(k,1)*(k-1)^n,减去有两种珍珠没有用到的。(就是容斥原理)

如果暴力求解,有0分呢。

接下来考虑1...n的情况,发现是等比数列。

还需要用到快速幂,乘法逆元,等比数列求和等一系列知识(好麻烦啊)。

感谢Silver_N指导。


#include<iostream>
#include<cstdio>
using namespace std;
const long long mod=1234567891;
int t;
long long ans,n,k,c[35][35];
long long ksm(long long x,long long p)
{
	if(p==0)
		return 1;
	long long res=ksm(x,p/2);
	res*=res,res%=mod;
	if(p%2==1)
		res*=x,res%=mod;
	return res;
}
long long ny(long long x)
{
	return ksm(x,mod-2);
}
long long calc(long long a1,long long q)
{
	if(q==1)
		return n*a1;
	return ((a1*(ksm(q,n)-1))%mod*ny(q-1))%mod;
}
int main()
{
	for(int i=0;i<=31;i++)
		c[i][0]=1;
	for(int i=1;i<=31;i++)
		for(int j=1;j<=i;j++)
			c[i][j]=c[i-1][j-1]+c[i-1][j];
	scanf("%d",&t);
	while(t--)
	{
		scanf("%lld%lld",&n,&k);
		long long tmp;
		ans=calc(k,k);
		for(long long i=1;i<=k;i++)
		{
			tmp=calc(c[k][i]*(k-i),k-i);
			if(i%2==1)
				tmp*=-1;
			ans=((ans+tmp)%mod+mod)%mod;
		}
		printf("%lld\n",ans);
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值