2019 年百度之星·程序设计大赛 - 初赛一 C. Mindis 离散化+dijkstra
题意:中文题面
思路:
先将所有题目给出的点离散化一下,得到一张n*m的网格,n和m最大都是400,所以我们只需要枚举每个加强的区域,将属于这个区域的边处理一下(所有横着的和竖着的边,暴力处理即可),然后相邻的点建边,建图,跑最短路即可。
$mp[x][y][k]$表示网格上横坐标$x$纵坐标$y$,方向为k(0,1,2,3表示上右下左)这条离散化后长度为1的边被矩形覆盖的次数(初始值为1),时间就是离散化前的长度除以次数.然后建边跑dijkstra。
比赛最后几分钟交了一发T了,发现离散化数组没排序就直接unique了,改完bug,bestcode就炸了。赛后补题,wa了两次,看着代码看了二十分钟,最后发现原来是oj没把题目搬完,交啥都是错的。。。搬完后就一发a了。。太伤心了。
- #include<bits/stdc++.h>
- #define rep(i,a,b) for(int i=a;i<=b;i++)
- #define dep(i,b,a) for(int i=b;i>=a;i--)
- #define clr(a,b) memset(a,b,sizeof(a))
- #define pb push_back
- #define pii pair<int,int >
- using namespace std;
- typedef long long ll;
- ll rd() {
- ll x=,f=;
- char ch=getchar();
- while(ch<''||ch>'') {
- if(ch=='-')f=-;
- ch=getchar();
- }
- while(ch>=''&&ch<='') {
- x=x*+ch-'';
- ch=getchar();
- }
- return x*f;
- }
- const int maxn=+;
- const int inf=0x3f3f3f3f;
- struct rc{
- ll x1,x2,y1,y2;
- }a[];
- double mp[][][];
- vector<ll >vx,vy;
- ll xa,ya,xb,yb,n,m,num;
- struct edge{
- int to;
- double w;
- friend bool operator<(const edge &a,const edge &b){
- return a.w>b.w;
- }
- };
- priority_queue<edge >q;
- vector<edge >ve[];
- int getid(int x,int y){
- return (y-)*n+x;
- }
- bool check(int x,int y){
- if(x<||x>n||y<||y>m)return false;
- return true;
- }
- double dis[];
- void dij(){
- int px1=lower_bound(vx.begin(),vx.end(),xa)-vx.begin()+;
- int px2=lower_bound(vx.begin(),vx.end(),xb)-vx.begin()+;
- int py1=lower_bound(vy.begin(),vy.end(),ya)-vy.begin()+;
- int py2=lower_bound(vy.begin(),vy.end(),yb)-vy.begin()+;
- int id1=getid(px1,py1),id2=getid(px2,py2);
- // printf("id1:%d id2:%d n:%d m:%d px1:%d py1:%d px2:%d py2:%d\n",id1,id2,n,m,px1,py1,px2,py2);
- dis[id1]=;
- q.push({id1,});
- while(!q.empty()){
- edge st=q.top();
- q.pop();
- int u=st.to;
- double w=st.w;
- // printf("u:%d w:%.4f\n",u,w);
- int si=ve[u].size();
- rep(i,,si-){
- int v=ve[u][i].to;
- if(dis[v]>dis[u]+ve[u][i].w){
- dis[v]=dis[u]+ve[u][i].w;
- q.push({v,dis[v]});
- }
- }
- }
- printf("%.5f\n",dis[id2]);
- }
- int main(){
- int T;
- cin>>T;
- while(T--){
- cin>>num;
- vx.clear(),vy.clear();
- rep(i,,num){
- a[i].x1=rd();
- a[i].y1=rd();
- a[i].x2=rd();
- a[i].y2=rd();
- vx.pb(a[i].x1),vx.pb(a[i].x2);
- vy.pb(a[i].y1),vy.pb(a[i].y2);
- }
- cin>>xa>>ya>>xb>>yb;
- vx.pb(xa),vx.pb(xb);
- vy.pb(ya),vy.pb(yb);
- sort(vx.begin(),vx.end());
- sort(vy.begin(),vy.end());
- vx.erase(unique(vx.begin(),vx.end()),vx.end());
- vy.erase(unique(vy.begin(),vy.end()),vy.end());
- n=vx.size(),m=vy.size();
- rep(i,,n){
- rep(j,,m){
- rep(k,,)
- mp[i][j][k]=;
- ve[getid(i,j)].clear();
- dis[getid(i,j)]=;
- }
- }
- rep(i,,num){
- int px1=lower_bound(vx.begin(),vx.end(),a[i].x1)-vx.begin()+;
- int px2=lower_bound(vx.begin(),vx.end(),a[i].x2)-vx.begin()+;
- int py1=lower_bound(vy.begin(),vy.end(),a[i].y1)-vy.begin()+;
- int py2=lower_bound(vy.begin(),vy.end(),a[i].y2)-vy.begin()+;
- rep(x,px1+,px2-){
- rep(y,py1+,py2-){
- mp[x][y][]++;
- mp[x][y][]++;
- mp[x][y][]++;
- mp[x][y][]++;
- }
- }
- rep(x,px1+,px2-){
- int y=py1;
- mp[x][y][]++;
- mp[x][y][]++;
- mp[x][y][]++;
- y=py2;
- mp[x][y][]++;
- mp[x][y][]++;
- mp[x][y][]++;
- }
- rep(y,py1+,py2-){
- int x=px1;
- mp[x][y][]++;
- mp[x][y][]++;
- mp[x][y][]++;
- x=px2;
- mp[x][y][]++;
- mp[x][y][]++;
- mp[x][y][]++;
- }
- mp[px1][py1][]++;
- mp[px1][py1][]++;
- mp[px1][py2][]++;
- mp[px1][py2][]++;
- mp[px2][py1][]++;
- mp[px2][py1][]++;
- mp[px2][py2][]++;
- mp[px2][py2][]++;
- }
- rep(i,,n){
- rep(j,,m){
- int id=getid(i,j);
- if(check(i-,j))ve[id].pb({getid(i-,j),(vx[i-]-vx[i-])/mp[i][j][]});
- if(check(i+,j))ve[id].pb({getid(i+,j),(vx[i]-vx[i-])/mp[i][j][]});
- if(check(i,j-))ve[id].pb({getid(i,j-),(vy[j-]-vy[j-])/mp[i][j][]});
- if(check(i,j+))ve[id].pb({getid(i,j+),(vy[j]-vy[j-])/mp[i][j][]});
- }
- }
- dij();
- }
- }
2019 年百度之星·程序设计大赛 - 初赛一 C. Mindis 离散化+dijkstra的更多相关文章
- 2019 年百度之星·程序设计大赛 - 初赛一 C. HDU 6670 Mindis 离散化+dijkstra
题目链接 :http://acm.hdu.edu.cn/showproblem.php?pid=6670 Mindis Time Limit: 4000/2000 MS (Java/Others) M ...
- 2019 年百度之星·程序设计大赛 - 初赛一Game HDU 6669 (实现,贪心)
Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...
- 2019 年百度之星·程序设计大赛 - 初赛四 1001 Strassen
比赛链接:2019 年百度之星·程序设计大赛 - 初赛四 题目链接:HDU-6719 Strassen C++ 没写出来 于是直接上 Java 暴力. 好像可以用 __int128. import j ...
- Seq[找规律]----2019 年百度之星·程序设计大赛 - 初赛一:1005
Seq Accepts: 1249 Submissions: 3956 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 ...
- 2019 年百度之星·程序设计大赛 - 初赛一 1005 Seq(数学规律)
http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=861&pid=1005 Sample Input Sampl ...
- HDU6383 2018 “百度之星”程序设计大赛 - 初赛(B) 1004-p1m2 (二分)
原题地址 p1m2 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total ...
- HDU6380 2018 “百度之星”程序设计大赛 - 初赛(B) A-degree (无环图=树)
原题地址 degree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Tot ...
- HDU 6118 度度熊的交易计划 【最小费用最大流】 (2017"百度之星"程序设计大赛 - 初赛(B))
度度熊的交易计划 Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- HDU 6119 小小粉丝度度熊 【预处理+尺取法】(2017"百度之星"程序设计大赛 - 初赛(B))
小小粉丝度度熊 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
随机推荐
- 什么是CI/CD?
CI, CD AND CD 当我们在谈论现代的软件编译和发布流程的时候,经常会听到CI 和CD这样的缩写短语.CI很容易理解,就是持续集成.但是CD既可以指代码持续交付,也可理解为代码持续部署.CI和 ...
- cm 安装cdh 后添加hive服务
cm 安装cdh 后添加hive服务,出现错误提示 添加服务时候hive 配置如下: 错误信息提示: 错误日志: xec /opt/cloudera/parcels/CDH-5.4.7-1.cdh5. ...
- 重大利好,Dubbo 3.0要来了。
关于Dubbo的好消息,2018年1月8日,Dubbo创始人之一梁飞在Dubbo交流群里透露了Dubbo 3.0正在开工的重大消息. Dubbo是阿里开源的分布式框架,已经多年停止更新处于半死不活状态 ...
- 高并发下的缓存架构设计演进及redis常见的缓存应用异象解决方案
待总结 缓存穿透 缓存击穿 缓存雪崩等
- USACO2012 overplanting /// 矩阵切割 递归 oj21547
题目大意: 在农场的任何一个“轴向对齐”的长方形区域(即垂直和水平方向)种植草坪. 现种植了N(1≤ N ≤10)个不同的矩形区域,其中一些甚至可能重叠. Input Multiple test ca ...
- 567. Permutation in String【滑动窗口】
Given two strings s1 and s2, write a function to return true if s2 contains the permutation of s1. I ...
- (数据科学学习手札58)在R中处理有缺失值数据的高级方法
一.简介 在实际工作中,遇到数据中带有缺失值是非常常见的现象,简单粗暴的做法如直接删除包含缺失值的记录.删除缺失值比例过大的变量.用0填充缺失值等,但这些做法会很大程度上影响原始数据的分布或者浪费来之 ...
- 在vue中使用高德地图开发,以及AMap的引入?
百度引入BMap ,一个import 即可,可AMap 却报AMap is not difined ? 1.首先在 externals: { "BMap": "BMap& ...
- $router和$route的区别,路由跳转方式name 、 path 和传参方式params 、query的区别
一.$router和$route的区别 $router : 是路由操作对象,只写对象$route : 路由信息对象,只读对象 例子://$router操作 路由跳转 this.$router.push ...
- vue之事件处理
一.事件处理方法 1.格式 完整格式:v-on:事件名="函数名" 或 v-on:事件名="函数名(参数……)" 缩写格式:@事件名="函数名&qu ...