hdu 2482
来源:互联网 发布:如何获取车流量数据 编辑:程序博客网 时间:2024/06/17 07:32
神技能 缩点
题意:
给出一幅地图 起点和终点(要按题中所说的规则转化成实际坐标)
给出一些公共汽车站 以及公车行进的线路
如果起点和终点距离不超过2000 则输出walk there
如果在离起点1000米内有车站 离终点1000米内有车站
并且可以从起点的车站坐bus到终点的车站 则输出最少换乘次数
否则输出take a taxi
#include <iostream>#include <cstdio>#include <cstring>#include <map>#include <vector>using namespace std;#define N 5010int ans[110][110];struct node{ int x,y;}data[N];void dis(char s[],int &x,int &y) { double ans = 10240/2.0,a = 0,b = 0,bili = ans/10; for(int i = 0; i < 8; i++) { if(s[i] == '0') i = i; else if(s[i] == '1') b = ans+b; else if(s[i] == '2') a = ans+a; else a = a+ans,b = b+ans; ans = ans/2.0; bili = ans/10; } x = a+x*bili; y = b+y*bili;}double dist(node a,node b) { return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);}void solve() { int n,m,k;scanf("%d",&n); char s[30],s1[30]; map<string,int>mp; n = n + 2; for(int i = 2; i < n; i++) { scanf("%s %d %d",s,&data[i].x,&data[i].y); mp[s] = i; } scanf("%d",&m); int x,y; vector<int>vc[110]; m = m + 2; for(int i = 2; i < m; i++) { scanf("%d",&x); while(x--) { scanf("%s",&s); y = mp[s]; vc[i].push_back(y); } } if(dist(data[0],data[1]) < 4000000) { printf("walk there\n"); return ; } for(int i = 0; i < m; i++) for(int j = 0; j < m; j++) ans[i][j] = N; for(int i = 2; i < m; i++) for(int j = 2; j < m; j++) if(i!=j) { bool flag = 0; for(int k = 0; k < vc[i].size(); k++) for(int z = 0; z < vc[j].size(); z++) if(vc[i][k] == vc[j][z]) flag = 1; if(flag) ans[i][j] = ans[j][i] = 1; } // 除了端点之外的边 for(int i = 2; i < m; i++) { // 起点构边 for(int j = 0; j < vc[i].size(); j++) if(dist(data[0],data[vc[i][j]]) <= 1000000) ans[0][i] = 1; } for(int i = 2; i < m; i++) { // 终点构边 for(int j = 0; j < vc[i].size(); j++) if(dist(data[1],data[vc[i][j]]) <= 1000000) { ans[1][i] = ans[i][1] = 1; } } for(int k = 0; k < m; k++) for(int i = 0; i < m; i++) for(int j = 0; j < m; j++) ans[i][j] = min(ans[i][j],ans[i][k]+ans[k][j]); if(ans[0][1] >= N) printf("take a taxi\n"); else printf("%d\n",ans[0][1]-1);}int main() { int t;scanf("%d",&t); while(t--) { char s[20]; scanf("%s %d %d",&s,&data[0].x,&data[0].y); dis(s,data[0].x,data[0].y); scanf("%s %d%d",&s,&data[1].x,&data[1].y); dis(s,data[1].x,data[1].y); solve(); } return 0;}
0 0
- hdu 2482
- HDU 2482 Transit search
- HDU 2482 Transit search
- hdu 2482 Transit search
- HDU 2482 Transit search
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- Android图片特效处理(像素处理)
- Android小项目之底部导航(RadioButton&Fragment&ViewPager)
- Understanding the Search Service Architecture
- navicat 快捷键
- Struts2中文下载乱码问题
- hdu 2482
- 高级IO
- nodejs中创建web服务被忽略的坑---listen hostname
- Struts--checkboxlist
- file_get_contents写入文件时换行
- MySQL增删改查小语句总结
- HDOJ 题目2642 Stars(二维树状数组)
- jQuery过滤器
- php通过socket和c通讯