CQOI 2017 小Q的表格
来源:互联网 发布:java考试题及答案 编辑:程序博客网 时间:2024/05/19 06:18
题目太长了略去不表。
听说这个题正解是
观察
设
因此我们有
然后。。。。。
如果我们可以
而这要求我们对
考虑递推,对于
这样的复杂度是
我们想办法把log去掉,注意对于
复杂度就变成了
【代码】
不要问我为什么有些奇怪的无用的东西。。
#include <bits/stdc++.h>using namespace std;#define rep(i,a,b) for (int i = a, _ = b; i <= _; i ++)#define cerr cerr << ">>> "const int mod = 1000000007;const int N = 4000003;inline int Pow(int a, int b) { a %= mod; int t = 1; while (b) { if (b & 1) t = 1ll * t * a % mod; a = 1ll * a * a % mod , b >>= 1; } return t;}inline int ars(int n) { return 1ll * n * (n + 1) / 2 % mod;}int p[N], f[N], vis[N], S[N], pr[N / 10], tot;int e[N], mn[N], inv[N];void init(int n) { inv[1] = 1; rep (i , 2 , n) inv[i] = mod - 1ll * (mod / i) * inv[mod % i] % mod; S[1] = 1; rep (i , 2 , n) { if (!vis[i]) pr[++ tot] = i, S[i] = mod + 1 - inv[i], mn[i] = i, e[i] = i; for (int j = 1; j <= tot && i * pr[j] <= n; j ++) { int d = pr[j], t = i * d; vis[t] = 1; if (i % d == 0) { mn[t] = d; e[t] = e[i] * d; S[t] = (1ll * S[t / e[t]] - 1ll * inv[d] * S[t / e[t]]) % mod; break; } e[t] = mn[t] = min(mn[i], d); S[t] = 1ll * (1 - inv[mn[t]] + mod) * S[i] % mod; } } int inv2 = (mod + 1) / 2; rep (i , 2 , n) S[i] = (1ll * S[i] * i % mod * i % mod * inv2 % mod + mod) % mod; S[1] = 1; rep (i , 2 , n) S[i] = (S[i - 1] + 2ll * i * S[i] % mod) % mod; rep (i , 1 , n) f[i] = 1ll * i * i % mod, p[i] = 1;}int x[N], g[N];int n, m;int gao(int a, int b) { if (a > b) swap(a, b); if (b % a == 0) return b / a % mod; return 1ll * b * Pow(b % a, mod - 2) % mod * gao(a, b % a) % mod;}int main() { ios::sync_with_stdio(0); cin >> m >> n; init(n); rep (i , 1 , m) { int k, a, b; long long y; cin >> a >> b >> y >> k; x[i] = y % mod; g[i] = __gcd(a, b); int tw = gao(a, b); int w = 1ll * tw * f[g[i]] % mod; f[g[i]] = 1ll * x[i] * Pow(tw, mod - 2) % mod; int ans = 1ll * ars(k) * ars(k) % mod; x[i] = 1ll * x[i] * Pow(w, mod - 2) % mod; w = x[i]; x[i] = 1ll * (w + mod - 1) * p[g[i]] % mod; p[g[i]] = 1ll * p[g[i]] * w % mod; rep (j , 1 , i) (ans += 1ll * g[j] * g[j] % mod * S[k / g[j]] % mod * x[j] % mod) %= mod; if (ans < 0) ans += mod; printf("%d\n", ans); } return 0;}
- CQOI 2017 小Q的表格
- NKOJ 4038(CQOI 2017) 小Q的棋盘(贪心)
- 洛谷3698 CQOI 2017 小Q的棋盘
- NKOJ 4040 (CQOI 2017) 小Q的表格(莫比乌斯反演+分块+递推+线性筛/欧拉函数+分块+线性筛)
- 【数论】[CQOI2017]小 Q 的表格
- bzoj4815 [Cqoi2017]小Q的表格
- 【CQOI2017】bzoj4815 小Q的表格
- bzoj 4815: [Cqoi2017]小Q的表格
- 【BZOJ4815】 [Cqoi2017]小Q的表格
- 4815: [Cqoi2017]小Q的表格
- BZOJ4815: [Cqoi2017]小Q的表格
- [bzoj4815][CQOI2017]小Q的表格
- [BZOJ 4815] [Cqoi2017]小Q的表格 解题报告
- 小 Q 的棋盘
- bzoj 4815: [Cqoi2017]小Q的表格 分块+莫比乌斯反演
- [分块 莫比乌斯反演] BZOJ 4815 [Cqoi2017]小Q的表格
- 【CQOI2017】小Q的棋盘
- CQOI2017 小Q的棋盘
- 【代码积累】countdown latch
- QDU no cer的一道简单签到题(线性递推)
- maven仓库配置
- Linux平台中Mysql安装-二进制方式
- 观察者模式
- CQOI 2017 小Q的表格
- CSS3阴影 box-shadow的使用和技巧总结
- 算法-求二叉树最小深度
- docker 使用 socks5代理
- javascript开发中 if 语句的推荐写法
- 前端构建之gulp与常用插件
- int转4个byte,byte的拼接
- Caused by: java.lang.ClassNotFoundException: Didn't find class "net.grandcentrix.tray.provider.TrayC
- 【代码积累】semaphore