[CF]Round513
A Phone Numbers
题意:定义“电话号码”为开头为‘8’,长度为11的字符串。给定一些字符,每个字符只能用一次,求可以拼出多少个电话号码(可以重复)。
直接min(str.length()/11, number_of_8_in(str))
B Maximum Sum of Digits
题意:设\(S(a)\)为\(a\)的各数位之和,求最大的\(S(a)+S(b)\),满足\(a+b=n\)。
让\(a\)全是\(9\)并且尽可能大就行了(鬼知道为什么)。
C Maximum Subrectangle
题意:给定序列\(A,B\),令矩阵\(C\)满足\(C_{i,j} = A_i B_j\),求\(C\)中元素和不超过\(x\)的最大子矩阵\((1\le len(A), len(B), A_i, B_i \le 2000, x \le 2\cdot 10^9)\)。
这个题实际上并不难,令\(f[z]\)为满足\(\sum_{l \le i \le r} b_i \le z\)的最大的\(r-l+1\)。由于\(z\le 2000*2000 = 4\cdot 10^6\),可以暴力枚举区间来更新答案。然后,最终答案就是最大的\((r - l + 1)f[x / \displaystyle\sum_{l \le i\le r} a_i]\)。
D Social Circles
题意:你有一些害♂羞的客人坐在若干个(自定)圆桌旁,他们需要自己左右各有一定数量的椅子,求最少要多少张椅子\((1 \le n \le 10^5)\)。
如果一开始每个人自己坐在一个桌子上,两个人\((a, b), (c, d)\)坐在一起相当于\((a, d), (c, b)\)分开坐。所以我们可以通过交换\(r\)来达到坐在一块的效果,所以,我们让小的\(l\)搭配小的\(r\),就可以算出最优解了。
E Sergey and Subway
题意:给定一棵树,并且连接起距离为2的所有点,求这时的所有点对之间的距离和。
“所有点对之间的距离和”,看到这句话我就想到了以前做过的一个题,直接树形DP就好了,新图中的距离等于\(\lceil dis(i,j)/2\rceil\),但事实上,直接加起来除以2不行的。所以就只能在dfs的时候顺带计算了,注意到是除以2后上取整,在进入子树的时候有一个奇偶互换的过程,具体实现看代码吧。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <vector>
#include <string>
typedef unsigned long long LL;
const int N = 200000+10;
const int M = N<<1;
std::vector<int> g[N];
LL n, tot, ans, sz[N], dep[N], even[N];
void dfs(int x, int f) {
tot += (dep[x] + 1) / 2;
sz[x]++;
even[x] = 1;
for (int i : g[x]) if (i != f) {
dep[i] = dep[x] + 1;
dfs(i, x);
sz[x] += sz[i];
even[f] += even[i];
}
}
void calc(int x, LL to, int f, LL p) {
// p是所有点中到x的距离为偶数的点的个数
// to是当前的答案
ans += to;
for (int i : g[x]) if (i != f) {
// 传递到儿子的时候
// 儿子的子树中的距离儿子为偶数的点的贡献-1
// 儿子的子树外距离儿子为奇数的点的贡献+1
calc(i, to - even[i] + p - sz[i] + even[i], x, n - p);
}
}
int main() {
scanf("%lld", &n);
for (int i = 1, x, y; i < n; ++i) {
scanf("%d%d", &x, &y);
g[x].push_back(y);
g[y].push_back(x);
}
dfs(1, 0);
calc(1, tot, 0, even[1]);
printf("%lld\n", ans / 2);
return 0;
}
emm,实际上,这个题还有一种更加简便的做法:我们完全可以将新图中的距离和写成\((DistSumOfOldTree+NumberOfOddPath)/2\),原图中的距离可以dfs的时候算(按边算贡献,即边的两侧的点数乘积)。然后长度为奇数的路径条数就是深度为奇数的点的个数乘以深度为偶数的点的个数。
F Shrinking Tree
题意:给定一棵树,每次等可能的选择一条边,将其左右端点合并,合并后的新点的编号是合并之前的两个点之一(等可能),问最后剩下的那个点的编号是\(x\)的可能性\((n \le 50)\)。
先推荐一下Mr-Spade的Blog。
这个题结合了树形DP和概率的内容。由于数据极小,即使\(O(n^5)\)的算法卡卡常也能跑过,所以我们不必担心时间复杂度的问题。因此,我们分开算每个点的答案,进行\(n\)次树形DP。
首先定义状态:\(f[i, j]\)表示当根节点的标号传递到\(i\)的时候,\(i\)的子树中还剩下\(j\)条边,只考虑\(i\)的子树,最后能留下来根节点的方案数。这样答案就是\(f[x, n-1] / (n-1)!\)。注意这里的方案数是广义的方案数,即每种方案下留下来的概率的和。
考虑树形DP的两个要素:合并子树的答案和将该节点的答案扩展到父亲。
如何合并子树的答案?考虑左儿子剩\(i\)个,右儿子剩\(j\)个,对父亲剩\(i+j\)个的贡献。由于这\(i+j\)个点删除的时候顺序是无关的,只要保证\(i\)和\(j\)各自的相对顺序就行,所以要乘\({i+j\choose j}\)。同样,之前的边如何删除也是无关的,所以还要乘\({sz(l)+sz(r)-i-j\choose sz(l)-i}\)其中\(sz(i)\)表示边数。
如何扩展到父亲?我们设\(g[i]\)为只考虑一个子树\(v\)时节点\(u\)还剩\(i\)条边的贡献,考虑\(f[v,j]\)的贡献,显然\(j \le i\)。如果\(j < i\),那么就是先删除\(v\)中的边到\(i-1\)条后,根节点标号到达\(u\),删到剩\(j\)条边的时候,根节点标号到达\(v\),由于标号的转移是等概率的,所以要除以\(2\)。当\(j=i\)的时候,也就是在删除\(v\)中的边的过程中已经删除了\(edge(u, v)\),这样一共有\(sz(v) - i + 1\)种删除的位置,所以贡献是\((sz(v)-i+1)*f(v, i)\)
这样,这个题就可做了。(这篇题解大量借鉴Mr-Spade的Blog的思想,代码还是上ta的Blog看吧,我就不献丑了。人类的本质是?)。
G Balls and Pockets
题意:有一个由无限个房间顺次连接构成的区域,每个房间里有一个和房间编号相同的球,其中\(n\)个房间里有一个口袋,定义过滤操作为:将有口袋的房间的球消灭,然后对于每个有球房间,其中的球放入现在编号最小且小于当前房间的空房间,如果没有这样的房间,就不移动这个球。\(m\)次询问第k次过滤后第x个位置上的球的编号\((n,m \le 10^5, x_i, k_i \le 10^9)\)。
H Sophisticated Device
题意:你有无限个存储单元,标号为\(1..\infty\),其中\(1\)号单元存储着数\(x\),二号单元存储着数\(y\),其余单元存储着\(1\),给定如下操作:+ e1 e2 to表示将单元\(e1\)和\(e2\)中的数的和放入单元\(to\)中,^ e1 e2表示将单元\(e1\)中的数的\(d\)次方放入\(e2\)中,f e表示返回单元\(e\)中的值,给定\(d\)和\(p\),你需要设计一个操作序列使得无论\(x,y\)是多少,最后都返回\(xy\)。(以上操作均在模\(p\)意义下,其中\(p\)为质数)\((2 \le d \le 10, 3 \le p \le 10^9 + 9)\)。
[CF]Round513的更多相关文章
- ORA-00494: enqueue [CF] held for too long (more than 900 seconds) by 'inst 1, osid 5166'
凌晨收到同事电话,反馈应用程序访问Oracle数据库时报错,当时现场现象确认: 1. 应用程序访问不了数据库,使用SQL Developer测试发现访问不了数据库.报ORA-12570 TNS:pac ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
- cf Round 613
A.Peter and Snow Blower(计算几何) 给定一个点和一个多边形,求出这个多边形绕这个点旋转一圈后形成的面积.保证这个点不在多边形内. 画个图能明白 这个图形是一个圆环,那么就是这个 ...
- ARC下OC对象和CF对象之间的桥接(bridge)
在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics.Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环 ...
- [Recommendation System] 推荐系统之协同过滤(CF)算法详解和实现
1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ...
- CF memsql Start[c]UP 2.0 A
CF memsql Start[c]UP 2.0 A A. Golden System time limit per test 1 second memory limit per test 256 m ...
- CF memsql Start[c]UP 2.0 B
CF memsql Start[c]UP 2.0 B B. Distributed Join time limit per test 1 second memory limit per test 25 ...
- CF #376 (Div. 2) C. dfs
1.CF #376 (Div. 2) C. Socks dfs 2.题意:给袜子上色,使n天左右脚袜子都同样颜色. 3.总结:一开始用链表存图,一直TLE test 6 (1)如果需 ...
- CF #375 (Div. 2) D. bfs
1.CF #375 (Div. 2) D. Lakes in Berland 2.总结:麻烦的bfs,但其实很水.. 3.题意:n*m的陆地与水泽,水泽在边界表示连通海洋.最后要剩k个湖,总要填掉多 ...
随机推荐
- opencv —— addWeighted 图像叠加(计算数组加权和)
计算数组加权和:addWeighted 可实现两个大小.类型均相同的数组(一般为 Mat 类型)按照设定权重叠加在一起. void addWeighted(InputArray src1,double ...
- 转载 selenium_对浏览器操作、鼠标操作等总结
https://www.jianshu.com/p/7a4414082ce2 查看环境conda info --env 激活环境conda activate machine 路径改成H:cd H:\p ...
- numpy reshape -1
来源:https://www.zhihu.com/question/52684594 z = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12] ...
- java学习笔记之IO编程—字节流和字符流
1. 流的基本概念 在java.io包里面File类是唯一一个与文件本身有关的程序处理类,但是File只能够操作文件本身而不能操作文件的内容,或者说在实际的开发之中IO操作的核心意义在于:输入与输出操 ...
- npm常用模块之cross-env使用
更多npm常用模块使用请访问:npm常用模块汇总 cross-env这是一款运行跨平台设置和使用环境变量的脚本. 为什么需要cross-env? NODE_ENV=production像这样设置环境变 ...
- git客户端的常用命令
注意:仓库只有管理员建的你才有权限上传,不然自己建的也没用,没权限上传 1.远程仓库路径查询 git remote -v 2.添加远程仓库 git remote add origin <你的项目 ...
- 【剑指Offer】04、重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...
- PAT (Basic Level) Practice (中文)1082 射击比赛 (20 分)
本题目给出的射击比赛的规则非常简单,谁打的弹洞距离靶心最近,谁就是冠军:谁差得最远,谁就是菜鸟.本题给出一系列弹洞的平面坐标(x,y),请你编写程序找出冠军和菜鸟.我们假设靶心在原点(0,0). 输入 ...
- 0级搭建类006-Oracle Solaris 安装 (10.13) 公开
项目文档引子系列是根据项目原型,制作的测试实验文档,目的是为了提升项目过程中的实际动手能力,打造精品文档AskScuti. 项目文档引子系列目前不对外发布,仅作为博客记录.如学员在实际工作过程中需提前 ...
- phpstorm安装bootstrap插件
一个插件可以很好的让我们工作节约时间 Bootstrap,来自 Twitter,是目前最受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 We ...