题解-骰子

题目

Description

桌面上有 2 只完全相同的骰子,定义一次操作如下:将桌子上的骰子全部抛出,然后去掉那些奇数点的骰子,如果桌子上还有骰子,则重复上面的操作。
求操作 n 次后,桌面上至少还有一个骰子的概率。
为了方便起见,你只需要输出概率对 19260817 取模的结果。

Input

11 个整数 n
保证 nlong long范围内

Output

11 个结果 对 19260817 取模的结果

Sample Input

1

Sample Output

4815205

HINT

对于 40% 的数据 : 1nnn1000000
对于 100% 的数据 : nlong long范围内

题解

说点题外话:这两个字读骰子(tóu zǐ)

容易看出,解此题分两部分:

  • 把概率对应的分数算出来
  • 把分数取模

关于分数取模

abmodp就是 a×b关于p的乘法逆元

a×b1(modp)

核心在于求解b关于p的乘法逆元。

即求解

ax1(modp)

概率

题目求桌面上至少还有一个骰子的概率,所以就是剩一个骰子和剩两个骰子的概率。

每个骰子的奇数和偶数的概率相等,都是12

每次操作后,2个骰子都留下和都去掉的概率都是14

2个骰子到1个的概率是12

当只剩1个骰子时,剩下和去掉的概率均是12
RT:
1ZMLVI.png

定义在第n次操作后,剩两个、一个、恰好零个的概率分别为f2(n)f1(n)f0(n)

剩两个的概率比较好求:

f2(n)=14n

剩一个的概率是由2个到1个的概率加由1个到1个的概率:

f1(n)=12×f2(n1)+12×f1(n1)

代入f2(n)=14n,

f1(n)=12×4n1+12×f1(n1)

代入f1(n1)

f1(n)=12×4n1+12×(12×4n2+12×f1(n2))

整理得,

f1(n)=12×4n1+14n1+14×f1(n2)

代入f1(n2)

f1(n)=12×4n1+14n1+14×(12×4n3+12×f1(n4))

整理得,

f1(n)=12×4n1+14n1+12×4n2+18×f1(n4)

到这里,已经容易看出:(每次分母除2,求和)

f1(n)=12×4n1+14n1+12×4n2++f1(0)

另有,

f1(0)=0

容易得出,

f1(n)=k=0n12k2×4n1

其实就是首项为2n12×4n1=12n末项为12×4n1等比数列

所以其和就是,

f1(n)=12n112×4n1

答案就是,

(1)Ans=f1(n)+f2(n)(2)=12n112×4n1+14n(3)=2n+114n

Code

附上本蒟蒻929B代码:

#include <cstdio>
#include <algorithm>

#define MOD 19260817
using namespace std;

long long fast_pow(long long a, long long b) {
	if (b == 0) return 1;
	if (b == 1) return a;
	long long half_result = fast_pow(a, b / 2);
	if (b % 2 == 0) return half_result * half_result % MOD;
	else return (((half_result * half_result) % MOD) * a) % MOD;
}

long long exgcd(long long a, long long b, long long &x, long long &y) {
	if (b == 0) {
		x = 1;
		y = 0;
		return a;
	}

	long long result = exgcd(b, a % b, x, y);
	long long t = x;
	x = y;
	y = t - (a / b) * y;
	return result;
}

int main() {
	long long n;
	scanf("%lld", &n);
	long long a = fast_pow(2, n + 1) - 1;
	a %= MOD;
	if (a < 0) a += MOD;

	long long b = fast_pow(4, n);
	long long x, y;
	long long g = exgcd(b, MOD, x, y);
	if (g != 1) printf("qwq");
	while (x < 0) x += MOD;
	x *= a;
	x %= MOD;
	printf("%lld\n", x);
	return 0;
}
posted @   方而静  阅读(254)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示