PAT 1072. Gas Station
来源:互联网 发布:后醍醐天皇知乎 编辑:程序博客网 时间:2024/05/24 06:07
题目:http://pat.zju.edu.cn/contests/pat-a-practise/1072
题解:
对每个加油站进行迪杰斯特拉处理,求出最小距离和平均距离,再按题目要求排序输出。
代码:
#include<cstdio>#include<cstring>#include<cmath>#include<string>#include<vector>#include<map>#include<set>#include<stack>#include<queue>#include<algorithm>using namespace std;#define INF 0x6fffffffint n,m,k,ds;int mapx[1015][1015];int distances[1015];bool flag[1015];struct point{ int id; double aver; double minx; point(int id,double minx,double aver) { this->id=id; this->aver=aver; this->minx=minx; }};vector<struct point> out;bool cmp(const struct point &a,const struct point &b){ return a.minx==b.minx?(a.aver==b.aver?(a.id<b.id):(a.aver<b.aver)):(a.minx>b.minx);}void dijkstra(int x){ int idx,minx; for(int i=0; i<n+m; ++i) { distances[i]=mapx[x][i]; flag[i]=false; } for(int i=0; i<n+m; ++i) { minx=INF; for(int j=0; j<n+m; ++j) { if(distances[j]<minx&&flag[j]==false) { minx=distances[j]; idx=j; } } flag[idx]=true; for(int j=0; j<n+m; ++j) if(mapx[idx][j]+distances[idx]<distances[j]) distances[j]=mapx[idx][j]+distances[idx]; } double minDist=19999999,total=0; for(int i=0; i<n; ++i) { if(i!=x) { if(distances[i]>ds) return; if(distances[i]<minDist) minDist=distances[i]; total+=distances[i]; } } struct point z(x,minDist,total/n); out.push_back(z);}int check(char ch[]){ int id=0,x; int len=strlen(ch); if(ch[0]=='G') x=1; else x=0; for(; x<len; ++x) id=id*10+ch[x]-'0'; if(ch[0]=='G') id+=n; return id-1;}int main(){ char a[5],b[5]; int dist; int x,y; scanf("%d%d%d%d",&n,&m,&k,&ds); for(int i=0; i<n+m; ++i) for(int j=0; j<n+m; ++j) { if(i==j) mapx[i][j]=0; else mapx[i][j]=INF; } for(int i=0; i<k; ++i) { scanf("%s%s%d",a,b,&dist); x=check(a); y=check(b); mapx[x][y]=mapx[y][x]=dist; } for(int i=n; i<n+m; ++i) dijkstra(i); if(!out.empty()) { sort(out.begin(),out.end(),cmp); printf("G%d\n%.1f %.1f\n",out[0].id-n+1,out[0].minx,out[0].aver); } else { printf("No Solution\n"); } return 0;}
来源:http://blog.csdn.net/acm_ted/article/details/20881645
0 0
- PAT 1072. Gas Station
- PAT 1072. Gas Station
- PAT 1072. Gas Station
- 【PAT】1072. Gas Station
- pat 1072. Gas Station
- PAT-1072. Gas Station(DIJKSTRA)
- PAT 1072. Gas Station (dijkstra)
- PAT 1072. Gas Station (30)
- PAT 1072. Gas Station (30)
- 【PAT】1072. Gas Station (30)
- PAT 1072. Gas Station (30)
- 浙大PAT 1072题 1072. Gas Station
- PAT A 1072. Gas Station (30)
- PAT甲级练习1072. Gas Station (30)
- 1072. Gas Station (30) PAT 甲级
- PAT甲级1072. Gas Station (30)
- PAT-A-1072. Gas Station (30)
- 【PAT甲级】1072. Gas Station (30)
- 实例1.1:通过HWND获得CWnd指针
- 华为机试题---统计并输出每个字符在字符串中出现的次数
- 规范/协议 ->往后推
- 花生壳使用,网站域名搭建
- TFIDF算法及应用
- PAT 1072. Gas Station
- 基础2
- HTML5网页如何让所有的浏览器都能识别HTML5标签样式
- 为了是浏览器识别<mxria></mxria>标签并显示对应样式的效果
- C++常见问题之二#define使用中的陷阱
- iOS 中正则表达式使用方法汇总
- Intel and AMD Manuals
- capitalism lab自动存档问题
- ddddddddddddd