[题解] 8.11考试 水渠

题目描述

把n+m个点分为两列,第一列有n个点,第二列有m个点。

每一列的点的横坐标相同,给这些点连边,将这n+m个点全部连通,求所连边的最小总和。

输入格式

第一行四个整数n,m,x1,x2,分别表示第一列的点数,第二列的点数,第一列中点的横坐标,第二列中的点的横坐标。

第二行n个正整数y1[1],y1[2],...,y1[n],表示第一列中的点的纵坐标。

其中,第一个数表示第一个点的纵坐标,接下来的数表示当前点与前一个点的纵坐标差。

第三行有m个正整数,意义同上。

输出格式

一个实数,为边的最小总和,答案保留两位小数。

数据范围

n,m<=600000,所有点的纵坐标不超过10^8,x1<x2<2000.

输入样例

2 3 1 3

1 2

2 2 1

输出样例

7.24

思路解析

这道题自认为是今天的签到题(蒟蒻只会写签到题的题解了)。

可以证明一个点最多连四条边。

即与同列的前一个点和后一个点各连一条。

然后以该点的纵坐标作一条平行于x轴的虚线。

与另一列的虚线上第一个点和虚线下第一个点各连一条边。

可以证明这两个点之一肯定是另一列离这个点最近的点。

然后跑kruscal就行了。

(其实正解是DP,但既然kruscal卡常卡过了就不写DP了吧2333 (bmw))

赋上代码

#include<bits/stdc++.h>
#define inf 1030032399
using namespace std;
const int N=6e5+5;
int n,m,len,xI,xII,yI[N],yII[N],pa[N*2];
double ans,minn=inf;
struct node{
  int x,y;double z;
  bool operator < (const node &mt)const {
    return z<mt.z;
  }
}f[N*4];
inline int read(){
  int r=0,t=1,c=getchar();
  while(c<‘0‘||c>‘9‘) t=c==‘-‘?-1:1,c=getchar();
  while(c>=‘0‘&&c<=‘9‘) r=r*10+c-48,c=getchar();
  return r*t;
}
double dis(int x,int y){
  double sss=x,llf=y;
  return sqrt((double)(xII-xI)*(double)(xII-xI)+(llf-sss)*(llf-sss));
}
int Find(int now){
  if(now==pa[now]) return now;
  return pa[now]=Find(pa[now]);
}
void kruscal(){
  int cnt=0;
  for(int i=1;i<=n+m;i++)
    pa[i]=i;
  for(int i=1;i<=len;i++){
    int zjy=Find(f[i].x),tlj=Find(f[i].y);
    if(zjy!=tlj){
      pa[zjy]=tlj;
      cnt++;ans+=f[i].z;
      if(cnt==n+m-1)
    return ;
    }
  }
}
int main(){
  freopen("canal.in","r",stdin);
  freopen("canal.out","w",stdout);
  int x;
  n=read(),m=read(),xI=read(),xII=read();
  yI[1]=read();
  for(int i=2;i<=n;i++){
    x=read();
    yI[i]=yI[i-1]+x;
    f[++len]=(node){i-1,i,x*1.};
  }
  yII[1]=read();
  for(int i=2;i<=m;i++){
    x=read();
    yII[i]=yII[i-1]+x;
    f[++len]=(node){i-1+n,i+n,x*1.};
  }
  int now=0;
  for(int i=1;i<=n;i++){
    for(int j=now+1;j<=m;j++){
      if(yII[j]>=yI[i])
    break;
      now=j;
    }
    if(now)
      f[++len]=(node){i,now+n,dis(yI[i],yII[now])};
    f[++len]=(node){i,now+n+1,dis(yI[i],yII[now+1])};
  }
  sort(f+1,f+len+1);
  kruscal();
  printf("%.2f",ans);
  return 0;
}

洛谷博客

原文地址:https://www.cnblogs.com/Biscuits0819/p/11336354.html

时间: 2024-07-30 20:02:15

[题解] 8.11考试 水渠的相关文章

9.11考试总结

# 9.11考试总结 细胞分裂 数学题目,因式分解后直接判断输入数据是否含有m1中分解出来的数,然后储存需要时间最大值中的最小值 #include<bits/stdc++.h> #define open(s) freopen(s".in", "r", stdin);// freopen(s".out", "w", stdout); #define IL inline #define ull unsigned lon

10.11考试总结

10.11考试总结 全是DP实际上发现暴力也能有部分分....... 三角形牧场 DP......当时总是感觉不像啊 需要处理的就是枚举三角形边长可能出现的情况.因为周长在输入端时候就可以确定了,所以只需要通过枚举两条边就可以强行算出第三条边..... 所以就省空间+时间.... f[0][0] = 1; for (int i=1; i<=n; ++i) for(int j=half; j>=0; j--) for(int k=j; k>=0; k--) if(j >= d[i]

6.11 考试修改+总结

第三题至今没敢写,感觉好恐怖QAQ 今天考得好糟糕 第一题只写了10分的暴力+(k=1)20分的网络流 后来题解告诉我k>1的时候可以分治到k=1,每层分治解决方法是同k=1的 考试的时候没有注意到2^k这个比较神奇的可以分治的性质 而且自己考场上丝薄了,没有发现因为是二分图可以直接跑欧拉回路的性质,而是裸套网络流模型 第二题其实已经接近想出了题解 自己考试的时候成功证明了暴力的复杂度是线性的 但是没有想到如何寻找0-1对,然后就只能暴力用Splay维护1所在的位置了 默默祈祷数据不要太卡我的做

【题解】HNOI2008GT考试

这题好难啊--完全不懂矩阵加速递推的我TAT 这道题目要求我们求出不含不吉利数字的字符串总数,那么我们有dp方程 : dp[i][j](长度为 i 的字符串,最长与不吉利数字前缀相同的后缀长度为 j 的方案数). dp[i][j] = Σdp[i - 1][k] * a[k][j] (a 数组表示从 k 状态转移到 j 状态的方案数).a 数组我们可以通过 kmp 对不吉利数字的每一个前缀后面加上'0'~'9'转移匹配得到(匹配成功表示成功转移状态,a[k][j]++;否则表示此时没有重合的后缀

2020.1.11考试总结

恭贺 treAKer 在毒瘤之神的考验一题中rank1,成为新一届毒瘤之神! ...... 结果今天就考了 treAKer 的毒瘤题... T1 考场上看到1e6就想O(n)的做法,结果失败了... 正解思路很神奇,就是先对物品按照a来排序,询问按照m来排序,用双指针一起扫,同时维护\(f_i\) 当物品的和为i时 在所有的方案中,最小的b最大 的方案中的 b值.判一下\(f_i\)和m+s的大小关系即可. #include<algorithm> #include<cstring>

玛雅游戏[NOIP2011]

题目描述 Mayan puzzle 是最近流行起来的一个游戏.游戏界面是一个7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定的步数内消除所有的方块,消除方块的规则如下: 1. 每步移动可以且仅可以沿横向(即向左或向右)拖动某一方块一格:当拖动这一方块时,如果拖动后到达的位置(以下称目标位置)也有方块,那么这两个方块将交换位置(参见输入输出样例说明中的图6 到图7):如果目标位置上没有方块,那么被拖动的方块将从原来的竖列中

cisco learn book index

------------------------------------------------------------------ Routing TCP/IP Volume 1 , Second Edition ------------------------------------------------------------------ Routing TCP/IP Volume 2 ---------------------------------------------------

基于web的数字化校园管理集成方案

软件系列 :基于web的数字化校园管理集成方案 开发公司: 慈溪市顺通网络技术有限公司 开发时间:2013/5/21 1. 引言 1.1编写目的 1.2项目背景 2.总体设计说明: 3. 系统概述 3.1系统建设目标 3.2系统功能 4.系统使用说明 4.1登录界面 4.1登录界面 4.2权限设置-个人权限 4.3学年管理 4.4学期管理 4.5年级管理 4.6班级管理及维护 4.61添加班级 4.62批量添加班级 4.63班级维护 4.64班级升迁设置 4.65班级升迁 4.66升迁管理 4.

阿里云ACP云计算认证分享--从零基础到拿证15天

2019年1月9号之前从未接触过阿里云,也对阿里云认证兴趣不大.只是浅浅的知道阿里云已经占有国内50%的公有云市场了.当天有同事聊说,阿里云这部分市场还不错,可以尝试学学.2019年1月10号,登录阿里云官网看看认证课程,云计算分为ACA.ACP和ACE.官网考试费分别是1200.1200和1920.因为本人已经获得CCIE RS和RHCE证书,肯定会朝着最高的ACE去考.ACA考试最低级的,不考虑.ACE是最终的目标,但是必须先考完ACP才可以报名ACE.想要深知这块内容,考证无非是最好的方式