题意:N张地图,查找某地点在不在某些地图上,若在,使用细节多的地图。使用哪个地图的破要求挺多,细心一点就好。


代码:(Accepted,0.000s)

//UVa511 - Do You Know the Way to San Jose?
//Accepted 0.000s
//#define _XIENAOBAN_
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<vector>
#include<cmath>
#include<map>
using namespace std;
#define EPS 1e-7 struct mapdat {
float area,ratio, midx, midy, x1, y1, x2, y2;
int level;
string name;
mapdat(char* n, float& t1, float& t2, float& t3, float& t4) :name(n), midx((t1 + t3) / 2), midy((t2 + t4) / 2) {
if (t1 < t3) x1 = t1, x2 = t3;
else x1 = t3, x2 = t1;
if (t2 < t4) y1 = t2, y2 = t4;
else y1 = t4, y2 = t2;
area = (x2 - x1)*(y2 - y1);
ratio = (float)fabs((y2 - y1) / (x2 - x1) - 0.75);
}
}; inline bool findloc(const mapdat& m, float& x, float& y) {
return x > m.x1&&x<m.x2&&y>m.y1&&y < m.y2;
} inline float dist(const mapdat& m, float& x, float& y) {
return (x - m.midx)*(x - m.midx) + (y - m.midy)*(y - m.midy);
} vector<mapdat> maps;
map<string, pair<float, float> > locs;
char stmp[80];
int l, lev(0);
float t1, t2, t3, t4; int main()
{
#ifdef _XIENAOBAN_
#define gets(T) gets_s(T, 80)
freopen("in.txt", "r", stdin);
#endif
gets(stmp);
while (scanf("%s", stmp) != EOF && strcmp(stmp, "LOCATIONS")) {
scanf("%f%f%f%f", &t1, &t2, &t3, &t4);
maps.push_back(mapdat(stmp, t1, t2, t3, t4));
} sort(maps.begin(), maps.end(), [](mapdat& a, mapdat& b) {return a.area > b.area;});
float a(-1.0);
for (auto& r : maps) {
if (fabs(r.area - a)>EPS)
r.level = ++lev, a = r.area;
else r.level = lev;
}
//for (auto& r : maps) cout << r.level << ' ' << r.name << '\t' << r.midx << ' ' << r.midy << ' ' << r.area << endl;//
while (scanf("%s", stmp) != EOF && strcmp(stmp, "REQUESTS")) {
scanf("%f%f", &t1, &t2);
locs[stmp] = make_pair(t1, t2);
}
while (scanf("%s", stmp) != EOF && strcmp(stmp, "END")) {
scanf("%d", &l);
printf("%s at detail level %d ", stmp, l);
auto nowloc(locs.find(stmp));
if (nowloc == locs.end()) {
printf("unknown location\n");
continue;
}
vector<mapdat> m,nm;
for (const auto& r : maps)
if (findloc(r, nowloc->second.first, nowloc->second.second))
if(r.level!=l)m.push_back(r);
else nm.push_back(r);
if (m.empty()) {
printf("no map contains that location\n");
continue;
}
auto cmp = [&nowloc](mapdat& a, mapdat& b)->bool {
auto& X(nowloc->second.first),& Y(nowloc->second.second);
if (a.level != b.level) return a.level > b.level;
auto da(dist(a, X, Y)),db(dist(b, X, Y));
if (fabs(da - db) > EPS) return da < db;
if (fabs(a.ratio - b.ratio) > EPS) return a.ratio < b.ratio;
da = (X - a.x2)*(X - a.x2) + (Y - a.y1)*(Y - a.y1);
db = (X - b.x2)*(X - b.x2) + (Y - b.y1)*(Y - b.y1);
if (fabs(db - da) > EPS) return da > db;
return a.x1 < b.x1;
};
if (nm.empty()) {
sort(m.begin(), m.end(), cmp);
if (m[0].level < l) printf("no map at that detail level; ");
printf("using %s\n", m[0].name.c_str());
continue;
}
sort(nm.begin(), nm.end(), cmp);
printf("using %s\n", nm[0].name.c_str());
}
return 0;
}

分析:状态不好没认真编,编的比较乱比较丑。还没开始优化,想着先提交个试试,结果这也0.000s通过了。。。看来数据比较水。那就不改动不优化了。

[刷题]算法竞赛入门经典(第2版) 5-12/UVa511 - Do You Know the Way to San Jose?的更多相关文章

  1. [刷题]算法竞赛入门经典(第2版) 4-6/UVa508 - Morse Mismatches

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,10 ms) //UVa508 - Morse Mismatches #include< ...

  2. [刷题]算法竞赛入门经典(第2版) 5-15/UVa12333 - Revenge of Fibonacci

    题意:在前100000个Fibonacci(以下简称F)数字里,能否在这100000个F里找出以某些数字作为开头的F.要求找出下标最小的.没找到输出-1. 代码:(Accepted,0.250s) / ...

  3. [刷题]算法竞赛入门经典(第2版) 5-13/UVa822 - Queue and A

    题意:模拟客服MM,一共有N种话题,每个客服MM支持处理其中的i个(i < N),处理的话题还有优先级.为了简化流程方便出题,设每个话题都是每隔m分钟来咨询一次.现知道每个话题前来咨询的时间.间 ...

  4. [刷题]算法竞赛入门经典(第2版) 4-5/UVa1590 - IP Networks

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,0 ms) //UVa1590 - IP Networks #include<iost ...

  5. [刷题]算法竞赛入门经典(第2版) 6-7/UVa804 - Petri Net Simulation

    题意:模拟Petri网的执行.虽然没听说过Petri网,但是题目描述的很清晰. 代码:(Accepted,0.210s) //UVa804 - Petri Net Simulation //Accep ...

  6. [刷题]算法竞赛入门经典(第2版) 6-6/UVa12166 - Equilibrium Mobile

    题意:二叉树代表使得平衡天平,修改最少值使之平衡. 代码:(Accepted,0.030s) //UVa12166 - Equilibrium Mobile //Accepted 0.030s //# ...

  7. [刷题]算法竞赛入门经典(第2版) 6-1/UVa673 6-2/UVa712 6-3/UVa536

    这三题比较简单,只放代码了. 题目:6-1 UVa673 - Parentheses Balance //UVa673 - Parentheses Balance //Accepted 0.000s ...

  8. [刷题]算法竞赛入门经典(第2版) 5-16/UVa212 - Use of Hospital Facilities

    题意:模拟患者做手术. 其条件为:医院有Nop个手术室.准备手术室要Mop分钟,另有Nre个恢复用的床.准备每张床要Mre分钟,早上Ts点整医院开张,从手术室手术完毕转移到回复床要Mtr分钟.现在医院 ...

  9. [刷题]算法竞赛入门经典(第2版) 5-11/UVa12504 - Updating a Dictionary

    题意:对比新老字典的区别:内容多了.少了还是修改了. 代码:(Accepted,0.000s) //UVa12504 - Updating a Dictionary //#define _XieNao ...

  10. [刷题]算法竞赛入门经典(第2版) 5-10/UVa1597 - Searching the Web

    题意:不难理解,照搬题意的解法. 代码:(Accepted,0.190s) //UVa1597 - Searching the Web //#define _XIENAOBAN_ #include&l ...

随机推荐

  1. Windows:将cmd命令行添加到右键中方法

    win10中将命令行cmd添加到右键的方法 Windows cmd 右键 win10 命令行 最近在学python,所以会用到很多库文件,但是有的库文件需要下载whl文件再通过cmd进行安装,所以每次 ...

  2. IOS开发创建开发证书及发布App应用(八)——使用Application Loader工具上传应用

    8.使用Application Loader工具上传应用 继续第七步在iTunes所创建的应用,打开应用,如下图 点击详情按钮进去之后,单击右上角Ready to Upload Binary按钮,如下 ...

  3. 老李推荐:第14章7节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-获取版本号 2

    代码先是发送”LIST”命令到ViewServer列出所有的打开的窗口,然后把每个窗口都保存起来.342行起按照源码的注释解析就是说:从协议版本3以后开始加入了窗口自动更新的功能,但是在此之前,如果用 ...

  4. webdriver介绍&与Selenium RC的比较

    什么是webdriver? webdriver是一个web自动化测试框架,不同于selenium IDE只能运行在firefox上,webdriver能够在不同的浏览器上执行你的web测试用例.其支持 ...

  5. Win10《芒果TV》商店版更新v3.4.0:率先支持创意者画中画,工作娱乐两不误

    在Win10创新者更新中,微软为Windows10 PC系统添加了UWP应用窗口置顶功能(亦称画中画功能),Win10版<芒果TV>更新v3.4.0,率先宣布支持画中画新特性,为广大用户带 ...

  6. Git安装与上传代码至Github

    转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6642887.html 这篇文章应该是全网最新,最全,最靠谱的Github安装到上传代码的流程. 1.Git ...

  7. H5学习的第三周

    上周,我们结束了京东站的制作,本周我们开始了手机站和响应式网站的学习,并仿制了一个手机端界面和一个响应式界面,在完成这两个网站的过程中我遇到了许多问题,也了解了它们的解决方法,接下来我讲详细介绍本周我 ...

  8. 学习HTML5的第二周

    ---恢复内容开始--- 这是我学习H5的第二周,在本周,我独立完成了一个网站的首页和一个二级页,虽然在做网页的时候我遇到了许多问题,但我自己想办法解决了其中的大部分,只留下了一小部分没有头绪的问题等 ...

  9. 一个只有99行代码的JS流程框架

    张镇圳,腾讯Web前端高级工程师,对内部系统前端建设有多年经验,喜欢钻研捣鼓各种前端组件和框架. 最近一直在想一个问题,如何能让js代码写起来更语义化和更具有可读性. 上周末的时候突发奇想,当代码在运 ...

  10. Linux:一位猫奴的意外产物

    作者:Vamei,严禁任何形式转载. 1991年年中,林纳斯·托瓦兹(Linus Torvalds)在自己房间里敲着键盘.他全神贯注地盯着14寸的黑色屏幕,都没感觉到自己的小猫Randi在扒自己的裤腿 ...