【Cf Edu #47 G】Allowed Letters】的更多相关文章

这个题大概就是每一个位置都有一个能填字符的限制(一个点集),给出已有的$n$个字符,问能填出的最小字典序的字符串. 总体思路是贪心,每一位尽量选最小的字符. 关键在于判断在某位选了一个字符后,接下来的位置能否满足限制. 考虑怎么判断有解,这里有一种网络流的思路: 有$6$个点,代表了$a - f$$6$个字符,有源点向这些点连边,流量为该字符的个数. 另有$2^{6}$个点,代表了各个点集,这些点向汇点连边,流量为该点集在所有限制中出现的次数. 如果某个点在一个点集中,则由该点向该点集连流量为$…
要求每个点子树中节点最多的层数,一个通常的思路是树上启发式合并,对于每一个点,保留它的重儿子的贡献,暴力扫轻儿子将他们的贡献合并到重儿子里来. 参考重链剖分,由于一个点向上最多只有$log$条轻边,故每个点最多被合并$log$次.但这不是这题想说的. 由于我们只保留以深度为下标的信息,重链剖分就会多算,以此引出长链剖分,权且作为一个模板来学习. 长链剖分时,每个点以最深的儿子作为长儿子,其余为短儿子. 每个点$O(1)$继承长儿子的信息,将短儿子的信息合并上来.每个点只有作为短儿子时才保留以它为…
题目 你有\(n\)个士兵,需要将他们分成\(m\)组,每组可以为0: 现在这些士兵要去攻打\(m\)个敌人,每个敌人的生命值为\(hp_i\) : 一轮游戏中一组士兵选定一个攻打的敌人,敌人生命值-=这组的人数: 胜利的判定是所有敌人的生命值为非正的: 输出胜利的最小轮数,可以达到最小轮数的分配方式,并输出每轮的策略: \(1 \le m \le n \le 10^6 \ , \ 1 \le \sum hp_i \le 10^6\) ; 题解 答案的下界是\(\lceil \frac{\sum…
B. Lost Number[CF交互题 暴力] This is an interactive problem. Remember to flush your output while communicating with the testing program. You may use fflush(stdout) in C++, system.out.flush() in Java, stdout.flush() in Python or flush(output) in Pascal to…
time limit per test 3 seconds memory limit per test 512 megabytes input standard input output standard output You are given an undirected graph with weighted edges. The length of some path between two vertices is the bitwise xor of weights of all edg…
  计蒜客)翻硬币 //暴力匹配 #include<cstdio> #include<cstring> #define CLR(a, b) memset((a), (b), sizeof((a))) using namespace std; int n, m, t; int main() { int i, j, x; scanf("%d", &t); while(t--) { scanf("%d%d", &n, &m)…
[题目链接]:https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=2133 [题意] [题解] 考虑每一个二进制数的最高位->第i位; 肯定是1(这里不讨论0的情况) 然后对于其余n-1个二进制数; 如果它们在第i位和它一样->也是1的话,那么异或结果是0 那么不管第i位后面的位怎么变;它肯定是变小的->我们要求的 如果它们在第i为和它不一样->即为0,那么异或结果是1; 则它肯定是变大了; 综上 我们只要确定每个数的最高位所在的位置i…
比赛传送门 再次改下写博客的格式,以锻炼自己码字能力 A. Suits 题意:有四种材料,第一套西装需要 \(a\).\(d\) 各一件,卖 \(e\) 块:第二套西装需要 \(b\).\(c\).\(d\) 各一件,卖 \(f\) 块.问,怎么做套装卖的前最多. 题解:[贪心]---- 先选比较贵的那一套,因为 \(d\) 套都要用上则以它为基准,再用剩余材料加第二套的总价钱 // https://codeforces.com/contest/1271/problem/A #include<i…
题目链接:http://codeforces.com/problemset/problem/549/G 题意:给定一个n个元素的整数序列a[], 任意时刻对于任一对相邻元素a[i-1]. a[i],若a[i-1] < a[i] 则要依次执行如下两个操作: 1. a[i-1]--, a[i]++: 2. 交换a[i-1]和a[i]的位置. 经过若干次1.2操作后,若能使整个序列变成非降的,则输出最终的序列:否则输出":(". 数据范围:n 属于 [1, 2*10^5], a[i]…
题目链接:http://codeforces.com/problemset/problem/675/D 题意:给一个由n个互异整数组成的序列a[],模拟BST的插入过程,依次输出每插入一个元素a[i]后a[i]的父节点. 数据范围:n [2, 10^5] 思路:直接模拟一般的BST而不维护平衡性的话,有可能会出现极度不平衡甚至退化的情况,复杂度会从O(nlogn)上升到O(n^2).因此要用平衡二叉树. 可以利用STL中的set容器,但对于题目所要找的“父节点”,set并不提供接口.这时就要考察…