题解-骰子
题目
Description
桌面上有
求操作
为了方便起见,你只需要输出概率对
Input
保证 long long
范围内
Output
Sample Input
1
Sample Output
4815205
HINT
对于
对于 long long
范围内
题解
说点题外话:这两个字读骰子(tóu zǐ)
容易看出,解此题分两部分:
- 把概率对应的分数算出来
- 把分数取模
关于分数取模
即
核心在于求解
即求解
概率
题目求桌面上至少还有一个骰子的概率,所以就是剩一个骰子和剩两个骰子的概率。
每个骰子的奇数和偶数的概率相等,都是
每次操作后,
由
当只剩
RT:
定义在第
剩两个的概率比较好求:
剩一个的概率是由2个到1个的概率加由1个到1个的概率:
代入
代入
整理得,
代入
整理得,
到这里,已经容易看出:(每次分母除2,求和)
另有,
容易得出,
其实就是首项为
所以其和就是,
答案就是,
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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 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的设计差异
· 三行代码完成国际化适配,妙~啊~