题解列表

筛选

蓝桥杯2015年第六届真题-垒骰子-题解(C++代码)

直接搜索可以得基础分。令f_{i,j}表示用i个骰子,最后一层正面朝上的为j的方案数。由于已知每个面相对的面是哪个面,所以原题的限制相当于:i和j不能相邻等价于i和j的对面不能是相邻两个正面朝上的面。例如,1和2不能相邻表示不能存在相邻两个骰子的正面朝上分别为1和5,也不能是2和4。

蓝桥杯2015年第六届真题-生命之树 (C++代码)

「算法描述」首先我们可以枚举每个点是否在S中,只需要判断S是否是一个连通块就可以了。时间复杂度O(n2^n)期望得分30分。我们把这棵无根树定一个根,将其转为有根树。这样每个点就有了深度。令f_v表示如果v一定在点集S中,且S中的所有点均在v这棵子树中时,S的权值和的最大值。

蓝桥杯2016年第七届真题-压缩变换-题解(C++代码)

这道题直接按照问题描述的,对于每个数向前找到这个数,并统计之间遇到的数的种类数(使用排序),复杂度为O(n2logn),可以得到约30%的分数。为了高效的解决这个问题,可以建立两棵平衡树。第一棵平衡树用于存储每个数和它最后出现的位置对应的映射。

蓝桥杯算法提高VIP-五次方数-题解(C++代码)

解题思路:这里不知道为什么,1居然不算在内,题目有没提,真的坑人。数字的上限大致估一下不会超过999999了这样算就可以得到结果了。解题代码:```cpp#includeusingnamespacestd;longlongf(inti){returni*i*i*i*i;}intmain(){longl

简单的字符串用STL高效解决(C++代码)

STL里面的Map方法可以很高效的解决这个题,因为mapv中只要添加了字符,不会有重复出现并且还能记录重复了几次,所以代码如下:#include#includeusingnamespacestd;intmain(){intN;chars[10000];cin>>N;while(N--){cin>>s;