SRM 585 Div II Level Three: EnclosingTriangleColorful
来源:互联网 发布:葫芦侠软件源 编辑:程序博客网 时间:2024/09/21 09:26
题目来源: http://community.topcoder.com/stat?c=problem_statement&pm=12694&rd=15697
这题目还是有一定难度的, 如果按照一般的思路, 遍历所有可能的三角形, 每个三角形再检查是否满足要求, 可以用判
断斜率的方法检查, 这样的话最多需要4*300*300*300*50次操作, 会超过时间限制, 事实也确实如此, 我之前用这种最
简单的方法, coding起来最容易, 但运行时间太长了, 所以必需采取优化措施.
代码如下:
#include <vector>using namespace std;/************** Program Begin *********************/struct rec {int x;int y;};const int MaxN = 50;static rec p[MaxN];void rotate(int m){for (int i = 0; i < MaxN; i++) {int temp = p[i].x;p[i].x = m - p[i].y;p[i].y = temp;}}int cacl(int m, int n){int ans = 0;for (int j = 1; j < m; j++) {int first = 0;int two = 0;for (int u = 1; u < n; u++) {if ( (p[u].y - j) * p[first].x > (p[first].y - j) * p[u].x ) {first = u;}if ( (p[u].y - j) * p[two].x < (p[two].y - j) * p[u].x ) {two = u;}}for (int k = 1; k < m; k++) {int three = 0;for (int u = 1; u < n; u++) {if ( (k-p[u].y)*(m-p[three].x) < (k-p[three].y)*(m-p[u].x) ) {three = u;}}for (int i = 1; i < m; i++) {if ( (m-j)*p[first].x < (p[first].y-j)*i ||(k-j)*p[two].x > (p[two].y-j)*m || (k-m)*(m-p[three].x) > (k-p[three].y)*(m-i) ) {continue;}++ans;}}}return ans;}class EnclosingTriangleColorful {public:int getNumber(int m, vector <int> x, vector <int> y);};int EnclosingTriangleColorful::getNumber(int m, vector<int> x, vector<int> y){int ans = 0;int n = x.size();for (int i = 0; i < n; i++) {p[i].x = x[i];p[i].y = y[i];}for (int i = 0; i < 4; i++) {ans += cacl(m, n);rotate(m);}return ans;}/************** Program End ************************/
- SRM 585 Div II Level Three: EnclosingTriangleColorful
- SRM 582 Div II Level Three: ColorTheCells, Brute Force 算法
- SRM 212 Div II Level Three: LargestCircle,Brute Force
- SRM 207 Div II Level Three: CaptureThemAll,BFS算法
- SRM 584 Div Ii Level Three: Excavations2, Dynamic Programming
- SRM 578 Div II Level Three: WolfInZooDivTwo,Dynamic Programming,求教!
- SRM 585 EnclosingTriangleColorful
- SRM 585 Div II Level Two: TrafficCongestionDivTwo
- SRM 583 Div II Level Three:GameOnABoard,Dijkstra最短路径算法
- SRM 586 Div II Level Three: StringWeightDiv2,Dynamic Programming or Math
- SRM 582 Div II Level Two SpaceWarDiv2
- SRM 207 Div II Level One: TransportCounting
- SRM 219 Div II Level Two: HealthFood
- SRM 233 Div II Level Two: PipeCuts
- SRM 299 Div II Level Two: Projections
- SRM 577 Div II Level Two: EllysRoomAssignmentsDiv2
- SRM 579 Div II Level Two: UndoHistory
- SRM 212 Div II Level Two: WinningRecord,Brute Force
- C#调用C++的API
- codeforce 173 div2 CF训练
- 一个电话避免了一次生产事故
- Google不会算减法?
- 程序员技术练级攻略
- SRM 585 Div II Level Three: EnclosingTriangleColorful
- Linux性能调优
- 《算法竞赛-训练指南》第一章-1.22_LA 3209
- float在行内元素和在块级元素不同表现
- 如师通语言学习软件(罗赛塔石碑)/Rosetta Stone 安装方法
- HDU-2052
- 探索 Linux 内核虚拟机 KVM 架构及其优点
- SharePoint 2013 Workflow 分布式配置问题记录
- Android多媒体播放器源码解析(stagefright框架)