博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SRM 521 解题报告
阅读量:4934 次
发布时间:2019-06-11

本文共 993 字,大约阅读时间需要 3 分钟。

听说这一轮是TCO的备用题,所以潘达教主悲剧地不能参加了。戴牛展现出了惊人的实力,勇夺第八,rating暴涨。250pt是一个很水的贪心题,500pt是一个有一些trick的暴力题,但是由于一些细节的原因,比赛的时候没有做出来。

 

以下是详细的报告:

250pt: 给定一个string,包括一串未匹配的括号对(),问要将这些括号匹配至少需要添加多少个括号。括号匹配类问题里最简单的一个问题了。假设在某个位置出现了一个右括号’)’而之前没有足够的左括号,则需要在它之前添加一个左括号,位置不限。假设以上条件满足,在串结束的时候发现左括号数比右括号数多(包括添加的左括号),则需要补全相应的右括号。算法就是基于以上两条原则进行贪心,用leftright变量来统计当前的左括号数和右括号数,视情况添加括号即可。

500pt: 在平面上有最多40个点,现在用一个大小范围在nlownhigh之间正方形去选取这些点,每一次选取可以不同的点集。问一共有多少个这样的点集。点坐标的范围-10e810e8nlownhigh的范围110e8。这一题比较阴险的一个地方在于,如果要枚举所有的点集,那么一共会有2^40个不同的点集,而函数的返回值也暗示了这一点,而事实上可能的组合大约只有(2n)^2种,这一点可以由一维的情况推广而知。假设在一维的轴上有若干个点,用一个矩形去选取不同的点的集合,我们发现,能选取到的只有连续的点集,推广到二维上亦是如此。将所有的点离散化后,我们得到一个N*N的矩阵,我们枚举这些矩阵,使其满足边长大于等于nlow并且小于等于nhigh、且可以构成正方形。将这样的正方形能选取的点集存入一个set,最后只需要统计set内元素的个数即可了。算法的复杂度O(40^4)

1000pt: 1*2的砖块堆一个烟囱,每一层用四块砖,每块砖必须放在两块砖的结合处之上。问要砌一个n (n<10e18)的烟囱,有多少种不同的砌砖顺序。枚举每一层可能出现的砖块排列情况作为dp的状态,手算推出状态间转移的方程,得到一个O(N)的算法。然后用矩阵乘的性质,对这个算法进行加速,类似于快速幂乘法的原理。具体的推算过程请见官方editorial:

转载于:https://www.cnblogs.com/magicdlf/archive/2011/11/08/SRM521.html

你可能感兴趣的文章
AtCoder Grand Contest 011题解
查看>>
AtCoder Grand Contest 010题解
查看>>
CODE FESTIVAL 2016 qual A题解
查看>>
CUDA -- 内存分配
查看>>
在C++工程上添加CUDA编译环境
查看>>
CUDA -- 规约求矩阵的行和
查看>>
一道有意思的思维题 --- 排序、枚举
查看>>
WXML 在前端页面中规定时间格式方法分享
查看>>
对博弈活动中蕴含的信息论原理的讨论,以及从熵角度看不同词素抽象方式在WEBSHELL文本检测中的效果区别...
查看>>
信道容量及信道编码原理学习
查看>>
关于信息论中熵、相对熵、条件熵、互信息、典型集的一些思考
查看>>
浅谈独立特征(independent features)、潜在特征(underlying features)提取、以及它们在网络安全中的应用...
查看>>
从随机过程的熵率和马尔科夫稳态过程引出的一些思考 - 人生逃不过一场马尔科夫稳态...
查看>>
《A First Course in Abstract Algebra with Applications》-chaper1-数论-关于素数
查看>>
Responsive设计——不同设备的分辨率设置
查看>>
开博篇
查看>>
需求调研分析
查看>>
Linux系统查看系统是32位还是64位方法总结(转)
查看>>
C#。5 结构体
查看>>
HDU-3729 I'm Telling the Truth
查看>>