PAT L3-005. 垃圾箱分布 26分 测试点4 过不了
PAT L3-005. 垃圾箱分布 26分 测试点4 过不了
题目描述
大家倒垃圾的时候,都希望垃圾箱距离自己比较近,但是谁都不愿意守着垃圾箱住。所以垃圾箱的位置必须选在到所有居民点的最短距离最长的地方,同时还要保证每个居民点都在距离它一个不太远的范围内。
现给定一个居民区的地图,以及若干垃圾箱的候选地点,请你推荐最合适的地点。如果解不唯一,则输出到所有居民点的平均距离最短的那个解。如果这样的解还是不唯一,则输出编号最小的地点。
输入格式
输入第一行给出4个正整数:N(≤10^3?? )是居民点的个数;M(≤10)是垃圾箱候选地点的个数;K(≤10^4?? )是居民点和垃圾箱候选地点之间的道路的条数;D?S?? 是居民点与垃圾箱之间不能超过的最大距离。所有的居民点从1到N编号,所有的垃圾箱候选地点从G1到GM编号。
随后K行,每行按下列格式描述一条道路:
P1 P2 Dist
其中P1和P2是道路两端点的编号,端点可以是居民点,也可以是垃圾箱候选点。Dist是道路的长度,是一个正整数。
输出格式
首先在第一行输出最佳候选地点的编号。然后在第二行输出该地点到所有居民点的最小距离和平均距离。数字间以空格分隔,保留小数点后1位。如果解不存在,则输出No Solution。
输入样例1
4 3 11 5
1 2 2
1 4 2
1 G1 4
1 G2 3
2 3 2
2 G2 1
3 4 2
3 G3 2
4 G1 3
G2 G1 1
G3 G2 2
输出样例1
G1
2.0 3.3
输入样例2
2 1 2 10
1 G1 9
2 G1 20
输出样例2
No Solution
测试点4过不了,难受……
C++ 代码
#include
using namespace std;
const int N = 1e3+20;
int g[N][N];
int n,m,k,Ds,dis[N];
bool st[N];
int ans=-1;
double minD=-1,minavg;
void bfs(int start)
{
memset(st,0,sizeof st);
memset(dis,0x3f,sizeof dis);
dis[start]=0;
queue q;
q.push(start);
st[start]=true;
while(q.size())
{
auto t = q.front();
q.pop();
for(int i=1;i<=n+m;i++)
{
dis[i]=min(dis[i],dis[t]+g[t][i]);
if(!st[i] && g[t][i]<0x3f3f3f3f/2)
{
q.push(i);
st[i]=true;
}
}
}
double mind=0x3f3f3f3f,avg=0;
for(int i=1;i<=n;i++)
{
if(dis[i]>Ds) return ;
avg+=(double)dis[i];
if(mind>dis[i]) mind=dis[i];
}
avg=(double)((avg+0.05)/double(n)); //保留一位小数,+0.05
mind=(double)(mind+0.05);
if(mind > minD)
{
ans = start-n;
minD = mind;
minavg = avg;
}
else if(mind == minD && avg < minavg)
{
ans = start-n;
minavg = avg;
}
}
int main()
{
memset(g,0x3f,sizeof(g));
cin>>n>>m>>k>>Ds;
string a,b;
int d;
for(int i=0;i
{
int a1,b1;
cin>>a>>b>>d;
if(a[0]=='G')
{
a=a.substr(1);
a1=stoi(a)+n;
}
else a1=stoi(a);
if(b[0]=='G')
{
b=b.substr(1);
b1=stoi(b)+n;
}
else b1=stoi(b);
//cout<
g[a1][b1]=g[b1][a1]=d;
}
for(int i=n+1;i<=n+m;i++)
{
bfs(i);
}
if(ans==-1) puts("No Solution");
else{
cout<
printf("%.1f %.1f",minD,minavg);
}
return 0;
}
PAT L3-005. 垃圾箱分布 26分 测试点4 过不了相关教程
JSONPath表达式
JSONPath表达式 JSONPath是一种简单的方法来提取给定JSON文档的部分内容。JSONPath提供的json解析非常强大,它提供了类似正则表达式的语法,基本上可以满足所有你想要获得的json内容。 1、操作符 ?:问号,标记表达式的开头。使用的语法 [?(表达)] 例如:[
pat 1086 Tree Traversals Again
pat 1086 Tree Traversals Again 用自己的思路就会出错……折磨死了。自己还是太菜了。 边遍历边建树 /*思路:建树*/#include iostream#include vector#include stack#include stringusing namespace std;struct Node{ int data; Node *left; Node *right; No
1071 Speech Patterns (25分)(map的常见用法)
1071 Speech Patterns (25分)(map的常见用法) 题目描述如下: 题目大致意思: 输出在一个字符串中出现次数最多的单词和其出现的次数。 大致思路: 先对字符串进行遍历,每当遇到分割符时,就把两个分隔符之间的字符串单独拿出,使用map来统计每个字符串出现
6.建造者模式
6.建造者模式 建造者模式 建造者模式(Builder Pattern) :使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 **主要解决:**主要解决在软件系统中,有时候面临着一个复杂对象的创建工
Python PAT乙级 1068 万绿丛中一点红 (20分) 成功
Python PAT乙级 1068 万绿丛中一点红 (20分) 成功 对于计算机而言,颜色不过是像素点对应的一个 24 位的数值。现给定一幅分辨率为 MN 的画,要求你找出万绿丛中的一点红,即有独一无二颜色的那个像素点,并且该点的颜色与其周围 8 个相邻像素的颜色差充分大。
Mysql存储过程生成树路径path
Mysql存储过程生成树路径path 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、先对表添加路径字段 二、写存储过程 1.代码如下 2.存储过程解读 总结 前言 因为项目里面的组织架构表没有保存组织路径,导致写sql查询不易
Could not create FileSystem for highly available storage pat
Could not create FileSystem for highly available storage path (hdfs://node7-1/flink/ha/flinkCluster) hadoop , zookeeper,工作正常,flink-standalone 启动正常。在搭建HA集群时,集群启动未报错,查看jps时发现没有进程,查看日志出现如下内容: 具体
Redundant Paths POJ - 3177(tarjan 双联通分量)这次是模板总
Redundant Paths POJ - 3177(tarjan 双联通分量)这次是模板总集 Redundant Paths POJ - 3177 题意: 给你一个无向图。问你最少添加几条边可以达到任意pair之间都是双联通。 思路: 本题要保证任意pair双联通。可以先求下双联通分量。 之后进行缩点。 观察下