Posted on 2010-07-03 11:00
王之昊 阅读(275)
评论(0) 编辑 收藏 引用 所属分类:
2:30
Stars
题意:给你一副星座地图,还有若干星座,对于每个星座,寻找他在地图中出现的次数。其中允许旋转和缩放,若某个星座在地图上的两个映射A,B所包含的点集是一样的,则A,B算一次。
大致思路是取出星座的第一,第二点,然后枚举这两个点在地图中的位置,将其他的点旋转过去检查是否合法。计算出次数S。
然后在类似的计算出星座在自身中重复出现的次数B,最后答案为S / B
在具体实现上有几个问题:
double round(double d){
return floor(d + 0.5);
}
- 用了vector,导致变慢, vector确实是慢了,改成数组 1000ms-->204ms
- 用了map和set导致变慢,将map改成手写的hash,204ms-->110ms
- 遇到段错误,结果发现是数组越界,数组越界有上越界(比如数组开小了)和下越界(比如下标为负)