CF335E Counting Skyscrapers 题解】的更多相关文章

提供一种最劣解第一且巨大难写的做法( Bob 显然真正的楼量可以达到 \(314!\),是没办法直接做的,再加上唯一方案的样例,可以猜测有简单的结论. 考虑当楼高度为 \(k(k<h)\) 时,每种高度对答案的贡献为 \(2^{k-1}\times 2^{-k}\),即 \(\frac{1}{2}\),当楼高度为 \(k(k \ge h)\) 时,每种高度对答案的贡献和为 \(2^k\times 2^{-k}\),即 \(1\).显然贡献都与 \(h\) 无关,也就是结论只和 \(n\) 有关,…
题目描述 定义 \(d(n)\) 为 \(n\) 的正因数的个数,比如 \(d(2) = 2, d(6) = 4\). 令 $ S_1(n) = \sum_{i=1}^n d(i) $ 给定 \(n\),求 \(S_1(n)\). 输入格式 第一行包含一个正整数 \(T\) (\(T \leq 10^5\)),表示数据组数. 接下来的 \(T\) 行,每行包含一个正整数 \(n\) (\(n < 2^{63}\)). 输出格式 对于每个 \(n\),输出一行一个整数,表示 \(S_1(n)\)…
http://codeforces.com/problemset/problem/335/E (题目链接) 题意 懒得写了= = Solution 这题咋不上天= =. 参考题解:http://blog.csdn.net/clover_hxy/article/details/62217674 对于第一问,有另一种比较容易懂的想法: 假设Bob即将走一条高度为h的溜索(此时他所在的大楼高度>=h),这条溜索的长度期望是多少? 此时Bob站在这条溜索的左端点,而未知的部分只有溜索越过的大楼和溜索的右…
题意 有一排高楼,每一栋高楼有一个正整数高度,高度为 \(i\) 的概率为 \(2^{-i}\).一栋楼的每层从下往上依次编号为 \(0,1,2,\cdots,i-1\). 为了出题,大楼之间安装了溜索.在一栋楼的第 \(i\) 层和另一栋楼的第 \(i\) 层之间有一条溜索,当且仅当这两栋楼之间没有一栋大楼高度达到 \(i\) 层. Alice 和 Bob 要数数有多少栋楼. Alice 非常细心,她从最左侧的楼出发,计数器为 \(1\).然后她向右移动,每经过一栋楼就将计数器 \(+1\).…
第一道 A 掉的严格意义上的组合计数题,特来纪念一发. 第一次真正接触到这种类型的题,给人感觉好像思维得很发散才行-- 对于一个排列 \(p_1,p_2,\dots,p_n\),对于每个 \(i\) 向 \(p_i\) 连一条边,可以发现整个构成了一个由若干环组成的图,目标是将这些环变为自环. 引理:把长度为 \(n\) 的环变为 \(n\) 个自环,最少交换次数为 \(n-1\). 用归纳法证,对于当前情况,任意一次交换都将其拆为两个环,由淘汰赛法则可知引理成立. 记 \(F_n\) 表示在最…
简单的深度搜索就能够了,看见有人说什么使用并查集,那简直是大算法小用了. 由于能够深搜而不用回溯.故此效率就是O(N*M)了. 技巧就是添加一个标志P,每次搜索到池塘,即有W字母,那么就觉得搜索到一个池塘了,P值为真. 搜索过的池塘不要反复搜索,故此,每次走过的池塘都改成其它字母.如'@',或者'#',随便一个都能够. 然后8个方向搜索. #include <stdio.h> #include <vector> #include <string.h> #include…
Content 有 \(n\) 张卡牌,每张卡牌上只会有大小写字母和 \(0\sim 9\) 的阿拉伯数字.有这样一个描述:"如果卡牌正面写有元音字母(\(\texttt{A,E,I,O,U}\) 五个字母中的一个),那么它的反面必然是偶数".你很想知道这个描述是否正确,因此你可以选择翻开一些卡牌来验证这个描述.求最坏情况下至少需要翻开的牌的数量. 数据范围:\(1\leqslant n\leqslant 50\). Solution 我们只需要找到元音字母和奇数的牌翻开就行.为什么是…
A: UVALive 6525 cid=61196#problem/A" style="color:blue; text-decoration:none">Attacking rooks 题解:点击打开链接 C: UVALive 6527 Counting ones 题解:点击打开链接 E: UVALive 6529 Eleven 题解:点击打开链接 F: UVALive 6530 Football 题解:点击打开链接 G: option=com_onlinejudge…
链接:https://codeforces.com/contest/1137 A - Skyscrapers 题解:对于每一段 $1$ 和每一段 $2$,统计他们的长度.因此对于相邻的两段长度求较小值,就有可能成为答案,维护所有的可能是答案的最大值即可. AC代码: #include<bits/stdc++.h> using namespace std; ; int n,t[maxn]; int l1,l2; int main() { cin>>n; ;i<=n;i++) s…
[题解]Counting D-sets(容斥+欧拉定理) 没时间写先咕咕咕. vjCodeChef - CNTDSETS 就是容斥,只是难了一二三四五\(\dots \inf\)点 题目大意: 给定你一个\(n\)维空间,问你这个空间内有多少个点集满足两点间最大的切比雪夫距离为\(d\).两个点集不同,当且仅当两个点集无法通过平移而想等. 转化1 考虑最后那个限制,平移想等的限制,受这道题的启发[题解]At2370 Piling Up,我们考虑钦定每一维的\(0\)点都有点坐落,这样就钦定了一个…
[题解]晋升者计数 Promotion Counting [USACO 17 JAN] [P3605] 奶牛们又一次试图创建一家创业公司,还是没有从过去的经验中吸取教训.!牛是可怕的管理者! [题目描述] 奶牛从 \(1\) ~ \(N(1≤N≤1e5)\) 进行了编号,把公司组织成一棵树,\(1\)号奶牛作为总裁(树的根节点).除总裁以外的每头奶牛都有且仅有唯一的一个的上司(即它在树上的父结点).每一头牛\(i\)都有一个不同的能力指数 \(p(i)\),描述了她对其工作的擅长程度.如果奶牛…
题目 [USACO14MAR]Counting Friends G 题解 这道题我们可以将 \((n+1)\) 个边依次去掉,然后分别判断去掉后是否能满足.注意到一点, \(n\) 个奶牛的朋友之和必定为偶数,所以去掉的那个数值的奇偶性必定与 \((n+1)\) 个数值之和的奇偶性相同. 接下来很明显的,尽量将朋友多的和朋友多的匹配,所以先从大到小排序,将第一个奶牛和后面的奶牛依次匹配,如果匹配结束,第一个奶牛还有剩余,则此情况必然不可能成立:否则匹配完之后再按照 \(O(n)\) 复杂度的归并…
CSAcademy Prefix Suffix Counting 题解 目录 CSAcademy Prefix Suffix Counting 题解 题意 思路 做法 程序 题意 给你两个数字\(N\)和\(M\),现在\(K\)表示\(M\)的位数.问你从\(1\)到\(N\),有多少个数字满足\(M\)同时是它的前\(K\)个数字和后\(K\)个数字. 思路 我们现在假设\(N\)和\(M\)都是字符串,如果没有特别提及,都作为字符串处理. 假设有一个数字\(S\)大于等于\(1\)小于等于…
前言 巨佬说:要有线段树,结果蒟蒻打了一棵树状数组... 想想啊,奶牛都开公司当老板了,我还在这里码代码,太失败了. 话说奶牛开个公司老板不应该是FarmerJohn吗? 题解 刚看到这道题的时候竟然没有想到深搜,然后仔细一想,发现果然要用深搜. 但是这个树形结构怎么维护是一个问题?难道打个欧拉序... 其实做法非常简单,首先按照套路我们把牛的能力值离散化(由于没有相同的值,所以这个离散化非常简单). 然后重点来了,建立一个维护某一能力值牛的个数的树状数组. 我们深搜到一个点的时候,我们不希望计…
分块\(yyds\) ----关于线段树合并的题我用分块过掉这件事 题目传送门 先说正解 正解当然是线段树合并等一类做法了 至于解析...出门右转题解区第一篇 (就是他让我看不懂,然后用分块打的\(QAQ\)) 给出 fengwu 的\(code\) #include<bits/stdc++.h> #include<iostream> using namespace std; #define re register int const int N=100005; int n; in…
Problem AtCoder-agc005D 题意概要:给出\(n,k\),求合法的排列个数,其中合法定义为任何数字所在位置与自身值差的绝对值不为\(k\)(即求排列\(\{A_i\}\),使得\(\forall i\in[1,n],|a_i-i|\not =k\) Solution 刚看这道题时除了全集取反搞容斥外没有任何思路啊 \(f_i\)表示排列中至少有\(i\)对冲突的方案数,一对冲突定义为存在一个\(i\)使得\(|a_i-i|=k\) 考虑全集取反,加上一点点容斥思想可得 \[A…
1.题目描述 2.问题分析 利用bitset. 3 代码 vector<int> countBits(int num) { vector<int> v; ; i <= num; i++){ bitset<> b(i); v.push_back( b.count() ); } return v; }…
统计每层的叶子节点个数建树,然后dfs即可 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <vector> using namespace std; /* 统计每层的叶子节点个数 建树,然后dfs即可 */ ; int n,m; int layer[maxn]; //统计每层的叶子节点个数 ; vector<int…
n位数,总共有0~10^n-1共计10^n个数那么所有数出现的总次数变为n*(10^n)个数1出现的次数便是十分之一,所以n位数中,1出现的次数为n*10^(n-1)知道这一个后,接下来就方便求了. 举个例子就方便理解了 3125 从头到尾for一遍 3:那么便有三组1000以内的:0~999,1000~1999,2000~29991000以内的1的个数为300,所以共有3*300=900但是又因为1000~1999中千位上的1也要算进去,有1000个所以0~2999中总共有900+1000=1…
题意:给出一个序列,构建二叉搜索树(BST),输出二叉搜索树最后两层的节点个数n1和n2,以及他们的和sum: n1 + n2 = sum 递归建树,然后再dfs求出最大层数,接着再dfs计算出最后两层的节点个数,也可以直接一遍dfs,顺便存储各个层的节点数. #include <iostream> #include <cstdio> #include <algorithm> #include <string.h> #define LEFT 1 #defin…
Description 求区间内有多少对 \((i,j)\) 满足 \(|a_i - a_j| \leq k\) Solution 可以莫队做(万能的莫队) 只需要考虑加入一个数会产生多少贡献即可 离散化的时候把 \(a_i,a_i - k, a_i+k\) 全部放进去. 加入一个数的时候只需要维护 \([a_i - k,a_i+k]\) 有多少个数,并且把 \(a_i\) 这个位置加上 1 删除亦然.这个可以用树状数组方便地维护. 具体实现的时候,因为树状数组是 sum(r) - sum(l-…
Description Due to recent rains, water has pooled in various places in Farmer John's field, which is represented by a rectangle of N x M (1 <= N <= 100; 1 <= M <= 100) squares. Each square contains either water ('W') or dry land ('.'). Farmer…
这是一道看似复杂其实也不简单的思维题. 其实思路很明显. 因为这道题的数据范围比较大,有1e5的询问,如果暴力(像我考场上那样打平衡树)的话可以做到$mnlogn$. 但那样也是稳T. 经过思考之后我们可以发现,这道题必定要使用m的解法,也就是对于每一个询问$O1$求解.(总不可能$mlogn$求解) 那么怎么$O1$呢? 众所周知,$O1$算法自古以来就和数学脱不开关系. 而本题中有哪些量可以扯上来搞一搞呢? 具体的值?肯定不现实. 那也就只剩下区间长度了. 针对区间长度进行考察之后,我们可以…
这道题开10倍左右一直MLE+RE,然后尝试着开了20倍就A了...窒息 对于这道题目,我们考虑使用线段树合并来做. 所谓线段树合并,就是把结构相同的线段树上的节点的信息合在一起,合并的方式比较类似左偏树什么的. 我们对于每个节点用权值线段树查询大于它的子节点数量,然后把当前节点并到它的父亲上面去. 对于此类型的题目我们通常使用动态开点的线段树(不然炸的没边). 时间复杂度应该是$O(nlogn)$ AC代码如下: 455ms 32824kb #include <bits/stdc++.h>…
地址 http://poj.org/problem?id=2386 <挑战程序设计竞赛>习题 题目描述Description Due to recent rains, water has pooled in various places in Farmer John’s field, which is represented by a rectangle of N x M (1 <= N <= 100; 1 <= M <= 100) squares. Each squa…
原题传送门 我们考虑进行容斥 包含原点的三角形个数=所有可能三角形的个数-不包含原点三角形的个数 对于每个点,我们会发现:将它与原点连线,在直线左边任选两点或右边任选两点与这个点构成的三角形一定是不包含原点的 对于每个点都这样计算,累加,会发现有算重复的(但不会少情况,自己画画图就民白了),所以每次只选这个点向量的半平面上的两个点 这样我们珂以对所有点进行极角排序,这样就珂以做到线性 代码中有几点要注意:1.特判点数小于3 \(\quad\) 2.long long #include <bits…
题面 \(\text{Flood Fill}\) 模板题. \(\text{Flood Fill}\) 可以快速求出一个图中连通块的个数. 大概就是遍历每一个点,如果它没有被遍历过且是一个新连通块,那么就将答案 \(+1\),然后从这个点向四周扩展. 主要使用 \(\text{BFS}\) 实现. 由于每个点都只会被遍历 \(1\) 次,因此时间复杂度是 \(O(n \times m)\) . #include <bits/stdc++.h> using namespace std; cons…
传送门 又是神仙DP 发现如果只有两个串就很好做了 于是这个神仙DP定义就从这里下手:令 $dp[p][c][l][r] 表示在 \([s_l, s_r]\) 这段字符串中,考虑从第 \(p\) 个位置开始的后缀,并要求这个字符至少为 \(c\) 考虑转移,因为这里有个「至少」,第一个转移是直接从 \(dp[p][c+1][l][r]\) 继承过来 考虑第二个转移 发现在 \([l, r]\) 中一定存在一个 \(c\) 到 \(c+1\) 的分界点,我们枚举这个分界点 同时如果我们强令为 \(…
Content 试求出在一个 \(n\times n\) 的地图 \(M\) 中,满足 \(1\leqslant i,j\leqslant n\) 且 \(M_{i,j}=M_{i+1,j+1}=M_{i-1,j+1}=M_{i-1,j-1}=M_{i+1,j-1}=\) X 这个字符的 \((i,j)\) 的对数. 数据范围:\(1\leqslant n\leqslant 500\),字符只包含 X 或者 .. Solution 直接暴力枚举判断就好了,建议用 \(i=1\sim n,j=1\…
ZOJ3944 People Counting ZOJ3939 The Lucky Week 1.PeopleConting 题意:照片上有很多个人,用矩阵里的字符表示.一个人如下: .O. /|\ (.) 占3*3格子,句号“.”为背景.没有两个人完全重合.有的人被挡住了一部分.问照片上有几个人. 题解: 先弄个常量把3*3人形存起来,然后6个部位依次找,比如现在找头,找到一个头,就把这个人删掉(找这个人的各个部位,如果在该部位位置的不是这个人的身体,就不删),删成句号,疯狂找就行了. 代码:…