美味果冻(牛客练习赛53B)
生活随笔
收集整理的這篇文章主要介紹了
美味果冻(牛客练习赛53B)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
美味果凍
∑i=1n∑j=1ii×?ij?j∑i=1n∑j=inj×?ji?i\sum_{i = 1} ^{n} \sum_{j = 1} ^{i} i \times \lfloor \frac{i}{j} \rfloor ^ j\\ \sum_{i = 1} ^{n} \sum_{j = i} ^{n} j \times \lfloor \frac{j}{i} \rfloor ^ i\\ i=1∑n?j=1∑i?i×?ji??ji=1∑n?j=i∑n?j×?ij??i
接下來(lái)只需要從小到大枚舉iii,因?yàn)橛?span id="ze8trgl8bvbq" class="katex--inline">j∈[ki,(k+1)i],?ji?=kj \in[ki, (k + 1)i], \lfloor \frac{j}{i} \rfloor = kj∈[ki,(k+1)i],?ij??=k,所以這里有一個(gè)分塊性質(zhì),差分前綴和即可得到。
最后在得到的數(shù)組中乘上一個(gè)數(shù)組下標(biāo),在求一次前綴和即是答案了。
#include <bits/stdc++.h>using namespace std;const int N = 3e6 + 10, mod = 1e9 + 7;int f[N], g[N], n;void init() {for (int i = 1; i < N; i++) {g[i] = 1;}for (int i = 1; i < N; i++) {for (int j = i; j < N; j += i) {int l = j, r = j + i;g[j / i] = 1ll * g[j / i] * (j / i) % mod;int cur = g[j / i];f[l] = (f[l] + cur) % mod;if (r < N) f[r] = (f[r] - cur + mod) % mod;}}for (int i = 1; i < N; i++) {f[i] = (f[i - 1] + f[i]) % mod;} }int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);init();scanf("%d", &n);int ans = 0;for (int i = 1; i <= n; i++) {ans = (ans + 1ll * i * f[i] % mod) % mod;}printf("%d\n", ans);return 0; }總結(jié)
以上是生活随笔為你收集整理的美味果冻(牛客练习赛53B)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 毕业证不见了要怎么弄 弄丢毕业证的补救方
- 下一篇: 火影忍者血轮眼都有什么技能 分别有哪些