杂题
acInfinity
CS
展开
-
Leetcode-1515 服务中心的最佳位置
题目大意就是,给定一个点集S,找到一个点A,使得A到S中所有点的欧几里得距离和最小min_distance_sum,求min_distance_sum。本质就是个优化问题。目标函数如下,求x,y求偏导,梯度下降,更新x, y;,alpha是学习率。同时为了防止振荡,在振荡发生时,调小学习率。终止条件是更新后的距离和和更新前比较小于题目给定阈值。from typing import Listclass Solution: def getMinDistS原创 2021-10-25 22:14:39 · 3544 阅读 · 0 评论 -
2017 ACM西安网络赛 E题 Maximum Flow
ACM 西安网络赛 E题原创 2017-09-16 20:11:18 · 648 阅读 · 0 评论 -
NBU 1763
官方题解还没放出,这里放上我自己的代码仅供参考。 递推公式很简单,观察样例可以得出 A[i][j]=(A[i-1][j-1]+A[i-1][j])/2),但,题目中要求每个数都保留前八位小数,这里的保留前八位并不是指在输出时保留八位小数,而是在运算过程中保留,即递推计算出每个值我们只能取八位小数。 如果直接用double存储值,在输出时截取八位小数会出现误差,input中有数据专门卡这一点。原创 2017-05-17 23:31:22 · 527 阅读 · 0 评论 -
ZOJ - 3949 Edge to the Root
Edge to the Root题意是给出一个棵树,每条边权都为1,要求在点1和点x之间连一条边,使得连边之后,点1到所有点的路径长度之和最小。 输出最小长度之和。 显然对于一棵树,添一条边之后,形成了一个环,一个在1-x的路径上的环,这个环的形成只对环上的点以及他们的子树上的点的距离产生了影响。 更准确地说,是对环的中点一下的点及子树产生了影响。 cnt数组记录每个点的子树大小+1(加上自己原创 2017-04-16 20:52:44 · 943 阅读 · 0 评论 -
UVALive - 4380 Javanese Cryptoanalysis
Uvalive 4380题意是给出一段密文,要求找出找一种解密方式,使得解密后的文本,任意一个单词都是元辅音间隔形成的。 数据输入比较恶心,单词之间可以是空格间隔,也可以是换行符间隔,因此必须读到一个空的行才表示一个TestCase结束。 输入的文本,处理出所有单词相邻字母的情况,存储在一个26*26的二维数组中,G[u][v]表示’A’+u与’A’+v在密文中相邻。 五重循环,枚举原文中的五原创 2017-04-16 20:28:05 · 300 阅读 · 0 评论 -
分桶法
分桶法与平方分割给定一个序列,并询问很多个区间,要求我们求该区间的最值,一般采用的都是ST算法,这边提供一个新的方法——分桶法。相比较ST算法,效率可能没有那么高,ST算法的查询效率是O(lg(n)),而分桶法的效率在O(sqrt(n)),n的平方根,但对于一些数据规模不大的题目,这样的效率已经足够。 那么怎么实现? 设序列有n个元素,我们将整个序列分成sqrt(n)桶,每个桶内有sqrt(n)原创 2017-03-16 23:48:06 · 6080 阅读 · 0 评论 -
HDU 4915
HDU 4915贪心,left_min[i]记录在保证1~i合法的情况下1~i最少的‘(’个数,left_max[i]记录在保证1~i合法的情况下1~i最多的‘(’个数,right_min[i]记录在保证(i+1)~n合法的情况下(i+1)~n最少的‘(’个数,right_max[i]记录在保证(i+1)~n合法的情况下(i+1)~n最多的‘(’个数。因为左括号是向右匹配的,所以向右贪心,而右括号是原创 2017-03-21 18:04:05 · 244 阅读 · 0 评论 -
HDU 5303
HDU 5303 题意是在一个圆上,有n颗苹果树,相对起点的顺时针距离为xi,每棵树上有ai个苹果。现在带上一个容量为K的篮子,从起点出发,问将所有苹果收回来至少要花多少时间? 显然,从起点出发,不论从从左或是右,在不跨过终点m时,摘到K个苹果后最佳的路径是原路返回。跨过了中点m,那么最佳路径是走一圈回到起点。显然,我们至多只会跨过m一次,因为跨过中点是不得已为之,走一圈是最长路径。 那么原创 2017-03-10 16:17:15 · 302 阅读 · 0 评论 -
28届宁波市中小学生程序设计竞赛复赛(初中组)
第4题-迷宫大门来源于宁波市程序设计竞赛复赛(初中组) n≤500,000,显然对于这么大的n,O(n^2)的解法都不够。那么考虑O(n)或者O(n*lg(n))的解法,动态规划?貌似可行,但状态怎么表示?左对齐?右对齐?除此,要怎么进行转移呢,毕竟a和b的范围也相当大,即便进行hash,最多也有500,000? 继续分析发现,题目中指出,每一处对齐都只得1分,这说明在左右不可能同时对齐的情况下原创 2017-02-23 15:09:29 · 1218 阅读 · 0 评论 -
HDU 5308
HDU 5308手工一个个算过去,发现 n=12时,我们可以通过(x+x+x+x)/x*(x+x+x+x+x+x)/x=24,来得到24点。 n=13时,构造(x+x+x)/x*(x+x+x+x +x+x+x+x)/x=24,来得到24点。 当n>13时, 1)n为奇数,我们可以通过一加一减多余的x来使x只剩13个,并应用上方n=13时的式子来得到24点; 2)n为偶数,同理,一加一减消去原创 2017-03-02 14:52:29 · 267 阅读 · 0 评论 -
Codeforces 733D Kostya the Sculptor
题目大意:有n个长方体石块,从中挑选不超过两块来雕刻一个球。要使球的半径最大,输出要选几个石块,以及选择的石块的编号。可以选择两个石块,用胶水把他们粘合。但两个石块的粘合面必须相同,完全吻合。简单分析可知,球的半径取决于长方体的最小维度。那么我们粘合两个石块时需要粘合的显然是非最小的维度组成的那个面,否则粘合并没有起到扩大半径的作用。输入时,将三个维度按大小排序好。再对所有石块进行排序,以原创 2017-02-13 16:31:27 · 212 阅读 · 0 评论 -
LA 5237
LA 5237题意是,折纸,每次都从左边向右边折,折n次,最后展开,要求输出折痕。 可以发现,i次的折痕称为Zi,Zi是由Z(i-1)加上Z(i-1)相对折痕终点顺时针旋转90度两部分构成的。那么我们记录下所有的方向角度, int acnt=0; ang[acnt++]=0, ang[acnt++]=1; for(int i=2;i<=n;i++){ int s=原创 2017-03-01 19:56:58 · 195 阅读 · 0 评论