惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 叶小钗
V
Visual Studio Blog
雷峰网
雷峰网
J
Java Code Geeks
博客园 - 三生石上(FineUI控件)
人人都是产品经理
人人都是产品经理
MyScale Blog
MyScale Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
B
Blog RSS Feed
C
Check Point Blog
博客园 - Franky
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 【当耐特】
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
V2EX
D
Docker
IT之家
IT之家
博客园 - 聂微东
腾讯CDC
U
Unit 42
Microsoft Security Blog
Microsoft Security Blog
The Cloudflare Blog

博客园 - magicdlf

[HIMCM暑期班]第4课: 扑克牌问题 [HIMCM暑期班]第3课:一个博弈问题 [HIMCM暑期班]第2课:建模 [HIMCM暑期班]第1课:概述 [C#]ASP.NET MVC 3 在线学习资料 [HIMCM]Consortium可以免费下载了! [C#]在Windows Service中使用ThreadPool [HIMCM]MathType小练习 [C#]DataGridView中使用数据绑定Enum类型 SRM 518 解题报告 SRM 522 解题报告 [原创]简易版Socket聊天室 附源码 再谈C#扫雷 C#实现扫雷出炉 如何通过P/Invoke返回Struct和String Array 计算文件的散列值 zz .NET抽象工厂模式 from cnblogs 清空VSTFS cache 如何在VSTFS中设置email notification
SRM 521 解题报告
magicdlf · 2011-11-08 · via 博客园 - magicdlf

听说这一轮是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:

http://apps.topcoder.com/wiki/display/tc/SRM+521