[题解][Codeforces 1139A~1139F]Codeforces Round #548 (Div. 2) 简要题解
- 终于 rank < 10 了
题目
洛谷 RemoteJudge
- A
- B
- C
- D
- E
- F
Codeforces
- A
- B
- C
- D
- E
- F
A
题意
- 一个长度为 nnn 的数字串 sss
- 求 sss 有多少个子串,满足子串内的数字顺次连接后得到的数是偶数
- 1≤n≤650001\le n\le 650001≤n≤65000 且 sss 不包含 000
题解
- ∑i=1ni[s[i]是偶数]\sum_{i=1}^ni[s[i]是偶数]i=1∑ni[s[i]是偶数]
代码
#include <bits/stdc++.h>// 20030830inline int read()
{int res = 0; bool bo = 0; char c;while (((c = getchar()) < '0' || c > '9') && c != '-');if (c == '-') bo = 1; else res = c - 48;while ((c = getchar()) >= '0' && c <= '9')res = (res << 3) + (res << 1) + (c - 48);return bo ? ~res + 1 : res;
}typedef long long ll;const int N = 1e5 + 5;int n;
char s[N];
ll ans;int main()
{n = read();scanf("%s", s + 1);for (int i = 1; i <= n; i++)if (s[i] - '0' + 1 & 1) ans += i;std::cout << ans << std::endl;return 0;
}
B
题意
- 一个长度为 nnn 的正整数数组 aaa
- 求一个长度为 nnn 的非负数组 xxx ,满足
- (1)对于所有的 1≤i≤n1\le i\le n1≤i≤n ,有 0≤xi≤ai0\le x_i\le a_i0≤xi≤ai
- (2)对于所有的 1≤j<i≤n1\le j<i\le n1≤j<i≤n ,有 xj=0x_j=0xj=0 或 xj<xix_j<x_ixj<xi
- (3)最大化 ∑i=1nxi\sum_{i=1}^nx_i∑i=1nxi
- 求这个最大值
- 1≤n≤2×1051\le n\le 2\times10^51≤n≤2×105 , 1≤ai≤1091\le a_i\le 10^91≤ai≤109
题解
- 从右到左考虑,显然每个 xix_ixi 需要取到它能取到的最大值
- 也就是说
- (1) xn=anx_n=a_nxn=an
- (2) xi=min(ai,max(0,xi+1−1))x_i=\min(a_i,\max(0,x_{i+1}-1))xi=min(ai,max(0,xi+1−1)) , 1≤i<n1\le i<n1≤i<n
代码
#include <bits/stdc++.h>// 20030830inline int read()
{int res = 0; bool bo = 0; char c;while (((c = getchar()) < '0' || c > '9') && c != '-');if (c == '-') bo = 1; else res = c - 48;while ((c = getchar()) >= '0' && c <= '9')res = (res << 3) + (res << 1) + (c - 48);return bo ? ~res + 1 : res;
}template <class T>
inline T Min(const T &a, const T &b) {return a < b ? a : b;}typedef long long ll;const int N = 2e5 + 5;int n, a[N], wt;
ll ans;int main()
{n = read();for (int i = 1; i <= n; i++) a[i] = read(); wt = a[n] + 1;for (int i = n; i >= 1; i--){wt--; if (wt < 0) wt = 0;wt = Min(wt, a[i]);ans += wt;}std::cout << ans << std::endl;return 0;
}
C
题意
- 一棵 nnn 个节点的树,边有红边和黑边
- 求有多少个节点序列 a1…ka_{1\dots k}a1…k
- 满足 a1a_1a1 到 a2a_2a2 , a2a_2a2 到 a3a_3a3 , …\dots… , ak−1a_{k-1}ak−1 到 aka_kak 这 k−1k-1k−1 条路径中存在一条经过了至少一条黑边
- 2≤n≤1052\le n\le10^52≤n≤105 , 2≤k≤1002\le k\le1002≤k≤100
题解
- 容易想到一个经典的 O(nk) 树形 DP
- 用总方案数 nkn^knk 减掉不经过黑边的方案数
- 显然,如果只加入所有红边,那么不经过黑边的方案数,就是节点序列 a1…ka_{1\dots k}a1…k 中所有点位于同一个连通块内的方案数
- 用并查集维护连通块大小
- 答案就是 nkn^knk 减去所有连通块的大小的 kkk 次幂之和
代码
#include <bits/stdc++.h>// 20030830inline int read()
{int res = 0; bool bo = 0; char c;while (((c = getchar()) < '0' || c > '9') && c != '-');if (c == '-') bo = 1; else res = c - 48;while ((c = getchar()) >= '0' && c <= '9')res = (res << 3) + (res << 1) + (c - 48);return bo ? ~res + 1 : res;
}const int N = 1e5 + 5, ZZQ = 1e9 + 7;int qpow(int a, int b)
{int res = 1;while (b){if (b & 1) res = 1ll * res * a % ZZQ;a = 1ll * a * a % ZZQ;b >>= 1;}return res;
}int n, k, fa[N], sze[N], ans;int cx(int x)
{if (fa[x] != x) fa[x] = cx(fa[x]);return fa[x];
}void zm(int x, int y)
{int ix = cx(x), iy = cx(y);if (ix != iy) fa[iy] = ix, sze[ix] += sze[iy];
}int main()
{int x, y, z;n = read(); k = read();for (int i = 1; i <= n; i++) fa[i] = i, sze[i] = 1;for (int i = 1; i < n; i++){x = read(); y = read(); z = read();if (!z) zm(x, y);}for (int i = 1; i <= n; i++)if (fa[i] == i) ans = (qpow(sze[i], k) + ans) % ZZQ;std::cout << (qpow(n, k) - ans + ZZQ) % ZZQ << std::endl;return 0;
}
D
题意
- 给定正整数 mmm ,你有一个空集合 aaa
- 每次你可以等概率随机一个 [1,m][1,m][1,m] 内的正整数加入集合 aaa
- 加入之后,如果集合 aaa 内所有数的 gcd\gcdgcd 为 111 则结束过程,否则继续随机
- 求过程结束后集合 aaa 的期望大小
- 1≤m≤1000001\le m\le 1000001≤m≤100000
算法:莫比乌斯反演 + 期望 DP
- 状态 f[i]f[i]f[i] 表示当前集合 aaa 的 gcd\gcdgcd 为 iii 的情况下,期望加入多少个数之后这个 gcd\gcdgcd 变成 111
- 显然有
- f[1]=0f[1]=0f[1]=0
- f[i]=1+1m∑j=1mf[gcd(i,j)]f[i]=1+\frac 1m\sum_{j=1}^mf[\gcd(i,j)]f[i]=1+m1j=1∑mf[gcd(i,j)]
- 发现 gcd(i,j)\gcd(i,j)gcd(i,j) 的取值个数只有 iii 的约数个数,所以把枚举 jjj 改成枚举 gcd(i,j)\gcd(i,j)gcd(i,j)
- f[i]+1+1m∑d∣if[d]×cnt(d,i)f[i]+1+\frac 1m\sum_{d|i}f[d]\times cnt(d,i)f[i]+1+m1d∣i∑f[d]×cnt(d,i)
- cnt(d,i)cnt(d,i)cnt(d,i) 表示 [1,m][1,m][1,m] 内有多少个数与 iii 的 gcd\gcdgcd 等于 ddd
- 另设 g(i,j)g(i,j)g(i,j) 表示 [1,i][1,i][1,i] 内有多少个数与 jjj 互质
- 显然有 cnt(d,i)=g(⌊md⌋,id)cnt(d,i)=g(\lfloor\frac md\rfloor,\frac id)cnt(d,i)=g(⌊dm⌋,di)
- 注意到 ∑i=1mmi=O(mlogm)\sum_{i=1}^m\frac mi=O(m\log m)∑i=1mim=O(mlogm)
- 所以考虑求出所有的 ij≤mij\le mij≤m ,对应 g(⌊mi⌋,j)g(\lfloor\frac mi\rfloor,j)g(⌊im⌋,j) 的值
- 那么对于给定的 a≥ba\ge ba≥b ,如何求有多少个 1≤i≤a1\le i\le a1≤i≤a 满足 gcd(i,b)=1\gcd(i,b)=1gcd(i,b)=1 呢?
- 如果不是满足 gcd(i,b)=1\gcd(i,b)=1gcd(i,b)=1 而是满足 x∣gcd(i,b)x|\gcd(i,b)x∣gcd(i,b) ,则这显然为 ⌊ax⌋\lfloor\frac ax\rfloor⌊xa⌋
- 所以,考虑反演,得
- g(a,b)=∑x∣bμ(x)⌊ax⌋g(a,b)=\sum_{x|b}\mu(x)\lfloor\frac ax\rfloorg(a,b)=x∣b∑μ(x)⌊xa⌋
- 线性筛 μ\muμ 之后就可以在 O(b的约数个数)O(b的约数个数)O(b的约数个数) 的时间内求出
- 设 D(x)D(x)D(x) 为 xxx 的约数个数,那么对每对 ij≤mij\le mij≤m 进行计算的总复杂度为
- ∑i=1m∑j=1⌊mi⌋D(j)=∑i=1m∑j=1⌊mi⌋⌊⌊mi⌋j⌋=∑i=1m⌊mi⌋logm=O(mlog2m)\sum_{i=1}^m\sum_{j=1}^{\lfloor\frac mi\rfloor}D(j)=\sum_{i=1}^m\sum_{j=1}^{\lfloor\frac mi\rfloor}\lfloor\frac{\lfloor\frac mi\rfloor}j\rfloor=\sum_{i=1}^m\lfloor\frac mi\rfloor\log m=O(m\log^2m)i=1∑mj=1∑⌊im⌋D(j)=i=1∑mj=1∑⌊im⌋⌊j⌊im⌋⌋=i=1∑m⌊im⌋logm=O(mlog2m)
- 回到这个转移
- f[i]+1+1m∑d∣if[d]×cnt(d,i)f[i]+1+\frac 1m\sum_{d|i}f[d]\times cnt(d,i)f[i]+1+m1d∣i∑f[d]×cnt(d,i)
- 发现 ddd 可以等于 iii ,得不到转移的目的,所以做一些移项
- (1−cnt(i,i)m)f[i]=1+1m∑d∣i,d≠if[d]×cnt(d,i)(1-\frac{cnt(i,i)}m)f[i]=1+\frac1m\sum_{d|i,d\ne i}f[d]\times cnt(d,i)(1−mcnt(i,i))f[i]=1+m1d∣i,d̸=i∑f[d]×cnt(d,i)
- f[i]=11−cnt(i,i)m(1+1m∑d∣i,d≠if[d]×cnt(d,i))f[i]=\frac1{1-\frac{cnt(i,i)}m}(1+\frac1m\sum_{d|i,d\ne i}f[d]\times cnt(d,i))f[i]=1−mcnt(i,i)1(1+m1d∣i,d̸=i∑f[d]×cnt(d,i))
- 于是我们就可以转移了
- 考虑如何算答案
- 由于第一个数可以随便取,所以答案为
- 1m∑i=1m(1+f[i])\frac1m\sum_{i=1}^m(1+f[i])m1i=1∑m(1+f[i])
- 看到某人的提交记录里有吊打标算的非 DP 做法,复杂度仿佛是 O(mlogm)O(m\log m)O(mlogm) ,所以有更优做法欢迎提出
代码
- 该代码中的 f[i]f[i]f[i] 表示的是题解中的 f[i]f[i]f[i] 加一,答案为 1m∑i=1mf[i]\frac1m\sum_{i=1}^mf[i]m1∑i=1mf[i] ,边界为 f[1]=1f[1]=1f[1]=1 ,见谅
#include <bits/stdc++.h>// 20030830inline int read()
{int res = 0; bool bo = 0; char c;while (((c = getchar()) < '0' || c > '9') && c != '-');if (c == '-') bo = 1; else res = c - 48;while ((c = getchar()) >= '0' && c <= '9')res = (res << 3) + (res << 1) + (c - 48);return bo ? ~res + 1 : res;
}const int N = 1e5 + 5, ZZQ = 1e9 + 7;int qpow(int a, int b)
{int res = 1;while (b){if (b & 1) res = 1ll * res * a % ZZQ;a = 1ll * a * a % ZZQ;b >>= 1;}return res;
}int n, f[N], miu[N], tot, pri[N], inv[N], wt[N], num[N], res[N], ans;
bool mark[N];
std::vector<int> divi[N], cont[N];int solve(int n, int m)
{int tt = divi[m].size(), res = 0;for (int i = 0; i < tt; i++){int x = divi[m][i];res += miu[x] * (n / x);}return res;
}void sieve()
{mark[0] = mark[miu[1] = 1] = 1;for (int i = 2; i <= n; i++){if (!mark[i]) miu[pri[++tot] = i] = -1;for (int j = 1; j <= tot; j++){if (1ll * i * pri[j] > n) break;mark[i * pri[j]] = 1;if (i % pri[j] == 0) break;else miu[i * pri[j]] = -miu[i];}}for (int i = 1; i <= n; i++)for (int j = i; j <= n; j += i)divi[j].push_back(i);for (int i = 1; i <= n;){int nxt = n / (n / i);for (int j = 1; j <= n / i; j++) res[j] = solve(n / i, j);for (int j = i; j <= nxt; j++)for (int k = j; k <= n; k += j)cont[k].push_back(res[k / j]);i = nxt + 1;}
}int main()
{n = read();inv[1] = 1;for (int i = 2; i <= n; i++)inv[i] = 1ll * (ZZQ - ZZQ / i) * inv[ZZQ % i] % ZZQ;sieve();f[1] = 1;for (int i = 2; i <= n; i++){int tt = divi[i].size();for (int j = 0; j < tt; j++)wt[j + 1] = 1ll * inv[n] * cont[i][j] % ZZQ, num[j + 1] = divi[i][j];int qt = qpow((1 - wt[tt] + ZZQ) % ZZQ, ZZQ - 2);for (int j = 1; j < tt; j++) wt[j] = 1ll * wt[j] * qt % ZZQ;f[i] = qt;for (int j = 1; j < tt; j++)f[i] = (1ll * wt[j] * f[num[j]] + f[i]) % ZZQ;}for (int i = 1; i <= n; i++)ans = (1ll * inv[n] * f[i] + ans) % ZZQ;std::cout << ans << std::endl;return 0;
}
E
题意
- 有 mmm 个集合和 nnn 个元素,每个元素一开始属于恰好一个集合,且第 iii 个元素的属性值为 pip_ipi
- 在每个集合中挑选一个元素(如果该集合为空就不要挑选),使得挑选出的所有元素的属性值的 mex\text{mex}mex 最大
- mex\text{mex}mex 表示最小没有出现过的自然数
- 你需要在每次删掉一个元素之后回答这个 mex\text{mex}mex 的最大值
- 1≤m≤n≤50001\le m\le n\le50001≤m≤n≤5000 , 0≤pi≤50000\le p_i\le50000≤pi≤5000
算法:二分图匹配
- 建一张二分图,一侧是属性值,一侧是集合,对于每个元素 iii 由 pip_ipi 向其所属集合连一条边
- 这样,如果 xxx 为满足属性值 [0,x][0,x][0,x] 都能找到匹配的最大 xxx ,答案就是 x+1x+1x+1
- 发现二分图删边不好处理,所以考虑倒着加边,在加边的过程中维护最大匹配
- 维护当前的最大 xxx
- 当加一条边之后,需要更新匹配数
- 具体地,尝试对点 x+1x+1x+1 寻找匹配
- 如果找得到匹配则将 xxx 加一,否则停止当前的匹配
- 由于属性值一侧的每个点最多寻找一次匹配,所以复杂度 O(nmaxp)O(n\max p)O(nmaxp)
代码
#include <bits/stdc++.h>// 20030830inline int read()
{int res = 0; bool bo = 0; char c;while (((c = getchar()) < '0' || c > '9') && c != '-');if (c == '-') bo = 1; else res = c - 48;while ((c = getchar()) >= '0' && c <= '9')res = (res << 3) + (res << 1) + (c - 48);return bo ? ~res + 1 : res;
}template <class T>
inline T Max(const T &a, const T &b) {return a > b ? a : b;}const int N = 3e4 + 5;int n, m, tot, p[N], c[N], d, k[N], ecnt, nxt[N], adj[N], go[N], ans[N],
QAQ, vis[N], my[N], now;
bool del[N];void add_edge(int u, int v)
{nxt[++ecnt] = adj[u]; adj[u] = ecnt; go[ecnt] = v;
}bool dfs(int u)
{for (int e = adj[u], v = go[e]; e; e = nxt[e], v = go[e])if (vis[v] < QAQ){vis[v] = QAQ;if (my[v] == -1 || dfs(my[v]))return my[v] = u, 1;}return 0;
}bool find_match(int x)
{QAQ++; return dfs(x);
}int main()
{memset(my, -1, sizeof(my));n = read(); m = read();for (int i = 1; i <= n; i++) tot = Max(tot, p[i] = read());for (int i = 1; i <= n; i++) c[i] = read();d = read();for (int i = 1; i <= d; i++) del[k[i] = read()] = 1;for (int i = 1; i <= n; i++) if (!del[i]) add_edge(p[i], tot + c[i]);for (int i = d; i >= 1; i--){while (now <= tot && find_match(now)) now++;ans[i] = now;add_edge(p[k[i]], tot + c[k[i]]);}for (int i = 1; i <= d; i++) printf("%d\n", ans[i]);return 0;
}
F
题意
- nnn 种菜和 mmm 个人
- 每种菜 iii 有三个属性 pi,si,bip_i,s_i,b_ipi,si,bi
- 每个人 jjj 有两个属性 incj,prefjinc_j,pref_jincj,prefj
- 一个人 jjj 能品尝菜 iii 当且仅当 pi≤incj≤sip_i\le inc_j\le s_ipi≤incj≤si 且 ∣bi−prefj∣≤incj−pi|b_i-pref_j|\le inc_j-p_i∣bi−prefj∣≤incj−pi
- 求每个人能品尝多少种菜
- 1≤n,m≤1051\le n,m\le 10^51≤n,m≤105 ,其他数据均为 10910^9109 级别
算法:扫描线 + 树状数组
- 此题有一个非常套路的 O((n+m)log2n)O((n+m)\log^2n)O((n+m)log2n) 做法( CDQ 分治)和一个比较妙的官方题解做法,复杂度少一个 log\loglog ,下面只讨论后者
- 首先, ∣bi−prefj∣≤incj−pi|b_i-pref_j|\le inc_j-p_i∣bi−prefj∣≤incj−pi 就相当于 bi−prefj≤incj−pib_i-pref_j\le inc_j-p_ibi−prefj≤incj−pi 且 prefj−bi≤incj−pipref_j-b_i\le inc_j-p_iprefj−bi≤incj−pi
- 把问题抽象到二维平面上,一个点 (x,y)(x,y)(x,y) 表示一个人的 incincinc 为 xxx , prefprefpref 为 yyy
- 整理一下得出条件
- (1) pi≤incj≤sip_i\le inc_j\le s_ipi≤incj≤si
- (2) incj+prefj≥bi+piinc_j+pref_j\ge b_i+p_iincj+prefj≥bi+pi
- (3) prefj−incj≤bi−pipref_j-inc_j\le b_i-p_iprefj−incj≤bi−pi
- 这相当于点 (incj,prefj)(inc_j,pref_j)(incj,prefj) 位于如下图所示的三角形内(含边界)
- 考虑扫描线,把所有人离线按照 incincinc 排序,按照 xxx 坐标递增的顺序扫描,当扫到 bib_ibi 时加入第 iii 个三角形的影响,扫到 si+1s_i+1si+1 时去除第 iii 个三角形的影响
- 我们对于每个人 (incj,prefj)(inc_j,pref_j)(incj,prefj) 需要询问这个点在多少个三角形内
- 考虑差分,也就是说当 x=x0x=x_0x=x0 时,如果直线 x=x0x=x_0x=x0 经过了第 iii 个三角形且 yyy 坐标范围 [l,r][l,r][l,r] 被第 iii 个三角形覆盖,则在 lll 处贡献 111 , r+1r+1r+1 处贡献 −1-1−1 ,则当 incj=x0inc_j=x_0incj=x0 时,单点询问 (incj,prefj)(inc_j,pref_j)(incj,prefj) 转化成询问前缀和 prefjpref_jprefj
- 于是我们考虑第 iii 个三角形的影响,可以看成
- (1)在直线 x+y=bi+pix+y=b_i+p_ix+y=bi+pi 上贡献 111
- (2)在直线 y−x=bi−pi+1y-x=b_i-p_i+1y−x=bi−pi+1 上贡献 −1-1−1
- 消除第 iii 个三角形的影响则同理
- 询问相当于询问横坐标为 incjinc_jincj ,纵坐标不超过 prefjpref_jprefj 的贡献之和
- 用两个数据结构 AAA 和 BBB 分别记录 x+yx+yx+y 和 y−xy-xy−x 的贡献
- 直线 x+y=kx+y=kx+y=k 能为 (incj,prefj)(inc_j,pref_j)(incj,prefj) 贡献当且仅当 k≤incj+prefjk\le inc_j+pref_jk≤incj+prefj
- 所以加入第 iii 个三角形时,在数据结构 AAA 的 bi+pib_i+p_ibi+pi 处进行单点加 111
- 直线 y−x=ky-x=ky−x=k 能为询问贡献当且仅当 k≤prefj−incjk\le pref_j-inc_jk≤prefj−incj
- 所以加入第 iii 个三角形时,在数据结构 BBB 的 bi−pi+1b_i-p_i+1bi−pi+1 处进行单点加 111
- 这样第 jjj 个询问的答案就是当 xxx 扫描到 incjinc_jincj 时,数据结构 AAA 的前缀和 incj+prefjinc_j+pref_jincj+prefj 减去数据结构 BBB 的前缀和 prefj−incjpref_j-inc_jprefj−incj
- 可以用树状数组等实现
- 复杂度 O((n+m)log(n+m))O((n+m)\log(n+m))O((n+m)log(n+m))
代码
#include <bits/stdc++.h>// 20030830inline int read()
{int res = 0; bool bo = 0; char c;while (((c = getchar()) < '0' || c > '9') && c != '-');if (c == '-') bo = 1; else res = c - 48;while ((c = getchar()) >= '0' && c <= '9')res = (res << 3) + (res << 1) + (c - 48);return bo ? ~res + 1 : res;
}const int N = 1e5 + 5, M = N << 2;int n, m, p[N], s[N], b[N], inc[N], pref[N], tot, a[M], A[M], B[M], cnt, ans[N];struct node
{int tm, x, y, op, id;
} que[M];inline bool comp(node a, node b)
{return a.tm < b.tm || (a.tm == b.tm && a.op < b.op);
}void changeA(int x, int v)
{for (; x <= tot; x += x & -x)A[x] += v;
}int askA(int x)
{int res = 0;for (; x; x -= x & -x)res += A[x];return res;
}void changeB(int x, int v)
{for (; x <= tot; x += x & -x)B[x] += v;
}int askB(int x)
{int res = 0;for (; x; x -= x & -x)res += B[x];return res;
}int main()
{n = read(); m = read();for (int i = 1; i <= n; i++) p[i] = read();for (int i = 1; i <= n; i++) s[i] = read();for (int i = 1; i <= n; i++) b[i] = read();for (int i = 1; i <= m; i++) inc[i] = read();for (int i = 1; i <= m; i++) pref[i] = read();for (int i = 1; i <= n; i++)a[++tot] = p[i] + b[i], a[++tot] = b[i] - p[i] + 1;for (int i = 1; i <= m; i++)a[++tot] = inc[i] + pref[i], a[++tot] = pref[i] - inc[i];std::sort(a + 1, a + tot + 1);int tt = std::unique(a + 1, a + tot + 1) - a - 1;tot = tt;for (int i = 1; i <= n; i++)que[++cnt] = (node) {p[i], p[i], b[i], 1, 0},que[++cnt] = (node) {s[i] + 1, p[i], b[i], -1, 0};for (int i = 1; i <= m; i++)que[++cnt] = (node) {inc[i], inc[i], pref[i], 2, i};std::sort(que + 1, que + cnt + 1, comp);for (int i = 1; i <= cnt; i++)if (que[i].op <= 1){changeA(std::lower_bound(a + 1, a + tot + 1,que[i].x + que[i].y) - a, que[i].op);changeB(std::lower_bound(a + 1, a + tot + 1,que[i].y - que[i].x + 1) - a, que[i].op);}else ans[que[i].id] = askA(std::lower_bound(a + 1, a + tot + 1,que[i].x + que[i].y) - a) -askB(std::lower_bound(a + 1, a + tot + 1,que[i].y - que[i].x) - a);for (int i = 1; i <= m; i++) printf("%d ", ans[i]);return puts(""), 0;
}
[题解][Codeforces 1139A~1139F]Codeforces Round #548 (Div. 2) 简要题解相关推荐
- # Codeforces Round #548 (Div. 2)C Edgy Trees
Codeforces Round #548 (Div. 2)C Edgy Trees 题目传送门 You are given a tree (a connected undirected graph ...
- Codeforces Round #686 (Div. 3) A-F题解
Codeforces Round #686 (Div. 3) A-F题解 A. Special Permutation 题意 给定 nnn ,输出一个长度为 nnn 的全排列,每个位置 iii 上的数 ...
- Codeforces Round #693 (Div. 3)部分题解
Codeforces Round #693 (Div. 3) 部分题解 D. Even-Odd Game 思路: 贪心:田忌赛马 (1)先将数组从大到小排序,取数时从大到小取,用一个ans变量记录取数 ...
- Codeforces Round #702 (Div. 3)A-G题解
Codeforces Round #702 (Div. 3)A-G题解 比赛链接:https://codeforces.ml/contest/1490 这场F读错题意白给一发,G二分的if(dp[mi ...
- codeforces Round #645 (Div. 2)D题解
Codeforces Round #645 (Div. 2)--D题解 作为一名菜鸡,理所当然得没有A出来,这道题数据放小就一水题了,可惜数据这块卡的死死的. 本题最重要的一点就是你要推出来一个结论: ...
- Codeforces Round #670 (Div. 2)A-D题解
Codeforces Round #670 (Div. 2)A-D题解 //写于rating值1987/2184 //补档 比赛链接:https://codeforces.ml/contest/140 ...
- Codeforces Round #674 (Div. 3)A-F题解
Codeforces Round #674 (Div. 3)A-F题解 比赛链接:https://codeforces.com/contest/1426 A题 水题不写题解 #include<b ...
- Codeforces Round #807 (Div. 2) A-C题解
Codeforces Round #807 (Div. 2) A.B.C题题解 A - Mark the Photographer 题意:马克要给2n个人照相,分两排,一排站n人,给出每个人的身高,要 ...
- Codeforces Round #723 (Div. 2) 个人题解
上1400辣! 传送门:https://codeforces.com/contest/1526 A. Mean Inequality 题意 给一个长度为偶数的数组,你需要重排这个数组,使得任意一个数不 ...
最新文章
- SpringMVC 运行过程
- [YTU]_2617(B C++时间类的运算符重载)
- 利用flask将opencv实时视频流输出到浏览器
- 【PAT】A1063 Set Similarity
- python调用matlab环境配置、非常详细!!!_Python调用Matlab2014b引擎
- python基础(part11)-作用域LEGB
- 中专选计算机应用很难,对中专计算机应用基础改革的思考.pdf
- 条码生成代码(Code39码)
- 使用ASP.NET Core 3.x 构建 RESTful API - 3.2 开始建立Controller和Action
- Linux获取本机hostname函数,Linux下获得主机与域名-gethostbyname和gethostbyaddr
- 使用named_mutex实现锁机制
- Linux Shell脚本入门教程系列之(十六) Shell输入输出重定向
- 【英语学习】【Level 07】U02 Live Work L2 A place to call my home
- Python根据字符分组数量判断密码安全强度
- 提高sql性能的方法_三种提高T-SQL性能的方法
- 没有安装opencv的linux系统上运行基于opencv,Linux环境下安装OpenCV
- Redis数据结构04-SortedSet
- 展示全面快速响应能力 华为全线解决方案亮相北京国际通信展
- python可以下载百度文库_Python在线百度文库爬虫(免下载券)
- 爬取招聘信息并进行数据分析及可视化
热门文章
- 使用51单片机编写计时器(分钟,秒钟分离版)
- MATLAB写UCB算法,科学网—【RL系列】Multi-Armed Bandit问题笔记——UCB策略实现 - 管金昱的博文...
- 安卓虚拟摄像头_华为Mate 40 Pro爆料,后置摄像头类似苹果iPod
- Xcode 真机调试失败:Errors were encountered while preparing your device for development
- 美国大选2020推特相关数据
- 【今日收获】关于[Error] expected identifier before ‘*‘ token的解决办法
- 运动世界校园一直显示服务器开小差,运动世界校园跑步异常 运动世界跑步成绩异常怎么办...
- 手写Android热修复
- 5行等腰三角形php,cad等腰三角形怎么画
- stm32内部Flash读写