题目
题意: 给定n个点,k个垃圾箱,m条边。(n=1e3,k=10,m=1e4)现在要从k个垃圾箱中选择一个合适的垃圾箱。合适的垃圾箱要满足到n个点的最短距离最大。如果有多个,则选到n个点的平均距离最小的。如果仍有多个,则选编号最小的。
思路: k才10,挨个跑一遍Dij就够用。这个题也挺逆天,样例是3.3,结果应该是3.25,如果四舍五入成3.3,过了样例但是会WA。如果输出3.2,过不了样例但是AC。什么逆天盲僧
时间复杂度: O(k * mlogm)
代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<complex>
#include<cstring>
#include<cmath>
#include<vector>
#include<map>
#include<unordered_map>
#include<list>
#include<set>
#include<queue>
#include<stack>
#include<iomanip>
#define OldTomato ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
#define fir(i,a,b) for(int i=a;i<=b;++i)
#define mem(a,x) memset(a,x,sizeof(a))
#define p_ priority_queue
// round() 四舍五入 ceil() 向上取整 floor() 向下取整
// lower_bound(a.begin(),a.end(),tmp,greater<ll>()) 第一个小于等于的
// #define int long long //QAQ
using namespace std;
typedef complex<double> CP;
typedef pair<int,int> PII;
typedef long long ll;
// typedef __int128 it;
const double pi = acos(-1.0);
const int INF = 0x3f3f3f3f;
const ll inf = 1e18;
const int N = 1e4+20;
const int M = 1e6+10;
const int mod = 1e9+7;
const double eps = 1e-6;
inline int lowbit(int x){ return x&(-x);}
template<typename T>void write(T x)
{if(x<0){putchar('-');x=-x;}if(x>9){write(x/10);}putchar(x%10+'0');
}
template<typename T> void read(T &x)
{x = 0;char ch = getchar();ll f = 1;while(!isdigit(ch)){if(ch == '-')f*=-1;ch=getchar();}while(isdigit(ch)){x = x*10+ch-48;ch=getchar();}x*=f;
}
int n,m,k,T;
int limit;
int h[N],e[N<<1],ne[N<<1],w[N<<1],idx = 0;
int dist[N];
bool vis[N];
int ans = -1e9; //最大的最短路,<=limit
double av = 1e9; //最小的平均距离
void add(int a,int b,int c)
{e[idx] = b,w[idx] = c,ne[idx] = h[a],h[a] = idx++;
}
void Dij(int S)
{mem(dist,0x3f);mem(vis,false);priority_queue<PII,vector<PII>,greater<PII> >q;dist[S] = 0;q.push({0,S});while(q.size()){PII tmp = q.top(); q.pop();int u = tmp.second; int dis = tmp.first;if(vis[u]) continue;for(int i=h[u];~i;i=ne[i]){int j = e[i];if(dist[j] > dist[u] + w[i]){dist[j] = dist[u] + w[i];q.push({dist[j],j});}}}
}
void solve()
{memset(h,-1,sizeof(h)); idx = 0;// ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);cin>>n>>k>>m>>limit;for(int i=0;i<m;++i){int flag = 0;string a,b; int x = 0,y = 0,z; cin>>a>>b>>z;if(a[0] == 'G') {a = a.substr(1); x = stoi(a)+n;}if(b[0] == 'G') {b = b.substr(1); y = stoi(b)+n;}if(x==0) x = stoi(a);if(y==0) y = stoi(b);add(x,y,z); add(y,x,z);}int idx = n; int cnt = 0;for(int t=n+1;cnt < k;++t,++cnt){Dij(t);int mn = 1e9;int mx = -1e9;double sum = 0;for(int i=1;i<=n;++i){mx = max(mx,dist[i]);if(mx > limit) break;mn = min(mn,dist[i]);sum += dist[i];}// cout<<t<<":"<<mn<<' '<<sum<<endl;if(mx > limit) continue;sum /= n;if(mn > ans){ans = mn;av = sum;idx = t;}else if(mn == ans){if(sum < av){av = sum;idx = t;}}}if(idx == n){cout<<"No Solution"; return ;}cout<<"G";cout<<idx-n<<"\n";cout<<ans<<".0 "<<fixed<<setprecision(1)<<av;
}
signed main(void)
{  T = 1;// OldTomato; cin>>T;// read(T);while(T--){solve();}return 0;
}

程序设计天梯赛L3-5 (数组开小然后T了,样例不过的代码才能AC,逆天盲僧)相关推荐

  1. 【CCCC】PAT : 团体程序设计天梯赛-练习集 L3 答案(01-23)

    [CCCC]PAT : 团体程序设计天梯赛-练习集 L3 答案 顶着满课,整整一星期,终于咕完了.(:´д`)ゞ 知识点分类(23): 1.搜索模拟(5):BFS,DFS,最短路,路径打印 2.计算几 ...

  2. PAT : 团体程序设计天梯赛-练习集 L3 答案即比赛技巧

    知识点分类(23): 1.搜索模拟(5):BFS,DFS,最短路,路径打印 2.计算几何(5):找规律,斜率计算,极角排序,三角形面积,三点共线,凸包 3.数据结构(5):栈,并查集,二叉树,堆,线段 ...

  3. 2020年团体程序设计天梯赛L1题目集(题目+代码)

    2020年11月团体程序设计天梯赛 第一次参加天梯赛,除了在门口冻得瑟瑟发抖,还有按不动的shift之外一切都还好- tip:不知道啥原因代码上基本没有注释,希望dalao们不要介意~ L1-1 嫑废 ...

  4. 团体程序设计天梯赛-L2组

    团体程序设计天梯赛-L2组 -------------------------------------------------------------------------------- 题目传送门 ...

  5. 程序设计天梯赛java版——T1(10分)

    程序设计天梯赛--java版 文章目录 程序设计天梯赛--java版 7-念数字 输入格式: 输出格式: 输入样例: 输出样例: 8-给整数段求和 输入格式: 输出格式: 输入样例: 输出样例: 13 ...

  6. PTA|团体程序设计天梯赛-练习题库集

    文章目录 关于爬取脚本的编写 L1-001 Hello World! (5 分) L1-002 打印沙漏 (15 分) L1-003 个位数统计 (15 分) L1-004 计算摄氏温度 (5 分) ...

  7. 2018团体程序设计天梯赛 软件学院选拔赛

    2018团体程序设计天梯赛 软件学院选拔赛 被你们虐了一下午的OJ是很辛苦的,让我们来看看题解吧. L1-01 微妙的平衡 题目描述: 平衡是一种很微妙的状态.施加在一个物体上各种力,在什么情况下会使 ...

  8. PTA团体程序设计天梯赛篇(五)---- 难题篇一(30分题目)

    PTA团体程序设计天梯赛 数据结构类型 L3-002 特殊堆栈(树状数组) L3-003 社交集群(并查集) 搜索 L3-004 肿瘤诊断(三维bfs) 确保bfs只遍历一次的方法 图论 L3-005 ...

  9. ptaa乘以b_PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中……)...

    C++ CPP C++语言开发 PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中--) PTA|团体程序设计天梯赛-练习题目题解锦集(持续更新中) 实现语言:C/C++:     ...

最新文章

  1. 我学python前一句_Python学习教程:人生苦短,我用Python?入门前你要知道这些
  2. 中原银行数字化营销体系建设实践
  3. C#中dynamic的正确用法 以及 typeof(DynamicSample).GetMethod(Add);
  4. zigbee的路由器能分配网络地址吗_真核细胞无丝分裂能将核DNA精准的平均分配到两个子细胞中吗?...
  5. VxWorks关于任务创建的几个函数的概述
  6. 浅谈Java中类加载机制
  7. 动态与代理AOP--01【代理的作用与概念】【动态代理与AOP】
  8. PHP面试题 - MySQL数据库
  9. 在c语言中字母是几个字节的,在c语言中int占几个字节
  10. android 获取录音时长_Android、iOS录音时音量大小计算
  11. 怎么用电脑把mp4格式转换成mp3格式
  12. idear开发工具创建maven的相关配置
  13. 《哈利·波特:霍格沃茨之谜》推出二月支线任务“天界舞会”,带来新的选择、挑战与服装
  14. C++输入一行数字存放到数组
  15. 一文带你快速入门【哈希表】
  16. PL/SQL-procedure-function-package创建
  17. 解决手机连接不上电脑开的热点问题
  18. opencv的图片处理:缩小尺寸为原图的一半【自己练习存档,没有参考价值,多看其他大神代码,谢谢】
  19. 龙芯千元电脑配置曝光 商用化产品即将面世
  20. java应用程序ui设计,Android应用UI设计流程

热门文章

  1. ROS 学习笔记 坐标变换
  2. nodejs redis 订阅/发布消息
  3. 幼儿园游戏与设计课程标准
  4. python中的变量的引用_python中的变量引用小结
  5. HTML中的target标签的属性值
  6. 一首小小的诗_RWERWERWE_96921_新浪博客
  7. Python全栈开发-数据分析-03 Pandas详解 (下)
  8. linux给data目录扩容,centos8使用lvextend对根目录进行扩容
  9. 如何测试移动端APP
  10. MySql分区(partion)之range(范围)-----------01