[ABC178C] Ubiquity 题解
1.[ABC178C] Ubiquity 题解
2.2023年最后一哆嗦 题解合集3.[ABC232E] Rook Path4.CF466D Increase Sequence5.[ABC163E] Active Infants6.[ABC193E] Oversleeping7.数论结论总结8.CF1523C Compression and Expansion9.P8249 模法问题10.P8438 极寒之地11.CF1912L LOL Lovers12.P3228 [HNOI2013] 数列13.CF1144D Equalize Them All14.P3823 [NOI2017] 蚯蚓排队15.字符串:匹配,Hash,KMP,Trie16.2023.10.18测试17.双联通分量(Tarjan)18.割点与桥(Tarjan)19.基础数论20.强连通分量(Tarjan)21.线段树22.线性DP几题23.2023.09.17测试24.基础背包dp题单25.DD dalao:背包九讲26.P2154 [SDOI2009] 虔诚的墓主人27.数列分块入门1-928.tarjan几题29.二分图30.最短路题意
有一个长为 \(n\) 的数列 \(a_1,a_2,...,a_n\) ,其中对于每个 \(a_i\) 都有 \(0 \le a_i \le 9\) ,并保证数列中至少有一个 \(a_i\) 为 \(0\) 且至少有一个 \(a_i\) 为 \(9\) 。输入 \(n\) ,输出满足条件的序列的个数对 \(10^9+7\) 取模之后的余数。
思路
简单到爆炸的容斥原理。
考虑四个集合:
- 所有序列;
- 包含 \(0\) 的序列;
- 包含 \(9\) 的序列;
- 既包含 \(0\) 又包含 \(9\) 的序列。
它们的数量分别是:
\[10^n,9^n,9^n,8^n
\]
那么根据容斥原理可得,\(ans = 10^n - 2 \times 9^n + 8^n\)。
由于数据较大,需要快速幂。
代码
注意 long long
和取模。
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e6 + 5, mod = 1e9 + 7;
int n;
ll tq, th1, tnh2;
ll qpow(ll a, ll b, ll mod) {
ll ret = 1;
while (b) {
if (b & 1) ret = ret * a % mod;
a = a * a % mod;
b >>= 1;
}
return ret;
}
int main() {
scanf("%d", &n);
tq = qpow(10, n, mod), th1 = qpow(9, n, mod), tnh2 = qpow(8, n, mod);
th1 *= 2;
ll ans = ((tq - (th1 - tnh2) % mod) + mod) % mod;
printf("%lld", ans);
return 0;
}
Blog by cloud_eve is licensed under CC BY-NC-SA 4.0
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步