会做的题

CF1717E Madoka and The Best University

妙妙题。

gcd(a,b)=gcd(a,a+b)=gcd(a,nc)

枚举 c,原式为 lcm(c,gcd(a,nc)),枚举 gcd(a,nc)=d,就是 lcm(a,d)

gcd(a,nc)=d 的个数就是 gcd(ad,ncd)=1 的个数,即 φ(ncd)

#include <bits/stdc++.h> #define int long long using namespace std; const int mod = 1e9 + 9; const int N = 2e6 + 100; int n, p[N], cnt, phi[N]; bool vis[N]; vector<int> g[N]; signed main() { freopen("qd.in", "r", stdin); freopen("qd.out", "w", stdout); cin >> n; phi[1] = 0; for (int i = 2; i <= N - 100; i++) { if (!vis[i]) { p[++cnt] = i; phi[i] = i - 1; } for (int j = 1; j <= cnt && i * p[j] <= N - 100; j++) { vis[i * p[j]] = 1; if (i % p[j] == 0) { phi[i * p[j]] = p[j] * phi[i]; break; } else { phi[i * p[j]] = (p[j] - 1) * phi[i]; } } } int ans = 0; for (int i = 1; i <= n - 2; i++) { // for (int j = 1; j <= n - i; j++) { // if ((n - i) % j == 0) { for (int k = i * 2; k <= n - 1; k += i) { int j = n - k; ans = (ans + i / __gcd(i, j) % mod * j % mod * phi[k / i] % mod) % mod; } // } } cout << ans << '\n'; return 0; } // 枚举 c,gcd(a, b) = gcd(a, a + b) = gcd(a, n - c) // ans = ∑lcm(c, gcd(a, n - c)) // 枚举 d = gcd(a, n - c) ans = ∑lcm(c, d) // gcd(a, n - c) = d 的个数是 gcd(a / d, (n - c) / d) = 1 的个数,也就是 phi((n - c) / d)

更新了?!

CF1634F Fibonacci Additions

考虑把 ai 减去 bi,记为 ci,那么现在的问题就变成了判断 ci 是否都是 0

想到差分,斐波那契数列满足 fi=fi1+fi2,那么不妨让差分数组 pi=fifi1fi2,那么操作就变成了:

  • op = A

plpl+f1=pl+1
pr+1pr+1frlfrl+1=pr+1frl+2
pr+2pr+2frl1frl=pr+1frl+1

  • op = B

plplf1=pl1
pr+1pr+1+frl+frl+1=pr+1+frl+2
pr+2pr+2+frl1+frl=pr+1+frl+1

在线维护 pi=0 的数量的大小即可。

#include <bits/stdc++.h> #define int long long using namespace std; const int N = 3e5 + 100; int n, q, mod, a[N], b[N], f[N], cnt; inline void change(int x, int k) { if (x > n) { return ; } cnt -= (a[x] == 0); a[x] = ((a[x] + k) % mod + mod) % mod; cnt += (a[x] == 0); } signed main() { ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); cin >> n >> q >> mod; f[1] = f[2] = 1; for (int i = 3; i < N; i++) { f[i] = (f[i - 1] + f[i - 2]) % mod; } for (int i = 1; i <= n; i++) { cin >> a[i]; } for (int i = 1; i <= n; i++) { cin >> b[i]; a[i] = (a[i] - b[i] + mod) % mod; } for (int i = n; i >= 2; i--) { a[i] = (a[i] - a[i - 1] + mod - a[i - 2] + mod) % mod; cnt += (a[i] == 0); } cnt += (a[1] == 0); for (int i = 1; i <= q; i++) { char op; int x, y; cin >> op >> x >> y; if (op == 'A') { change(x, 1); change(y + 1, -f[y - x + 2]); change(y + 2, -f[y - x + 1]); } else { change(x, -1); change(y + 1, f[y - x + 2]); change(y + 2, f[y - x + 1]); } cout << (cnt == n ? "YES" : "NO") << '\n'; } return 0; }

__EOF__

本文作者ようこそ!
本文链接https://www.cnblogs.com/ydq1101/p/18393381.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   ydq1101  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示