首页 > 其他分享 >一道贪心小题

一道贪心小题

时间:2023-04-18 15:23:33浏览次数:34  
标签:老鼠 leq int d% db 一道 y2 贪心

题目

在二维平面中有 \(n\) 只老鼠,有 \(A,B\) 两个洞,洞 \(A\) 的容量是 \(k\),洞 \(B\) 的容量是 \(n-k\)。汤姆来了,每只老鼠都要钻进洞里,给出洞 \(A,B\) 和每只老鼠的坐标,安排老鼠进洞使老鼠进洞总路程最短。\(1\leq n,k\leq1e5,1\leq坐标值\leq1e9\)
允许误差 \(1e-5\)

分析

因为给定了点坐标,所以每点到a,b的距离都是固定的,可以先求出。
那么就转化为该问题:
两个长度为 \(n\) 的数组 \(a\) 和 \(b\),\(a\) 中选 \(k\) 个数,\(b\) 中选 \(n-k\) 个数且两数组中选的数下标必须不同。求选出的 \(n\) 个数之和最小。\((n,k\leq 1e5)\)
策略:贪心选取。
只需先全选 \(b\) 然后再把最小的 \(k\) 个 \(a_i-b_i\) 加上即可

Code

#include <bits/stdc++.h>
#define db double

using namespace std;
const int N = 1e5 + 5;
int n, k, xa, ya, xb, yb;
db ans, e[N];

db count (int x1, int y1, int x2, int y2) {
    return sqrt ((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}

int main () {
    scanf ("%d%d%d%d%d%d", &n, &k, &xa, &ya, &xb, &yb);
    for (int i = 1; i <= n; i++) {
        int x, y;
        scanf ("%d%d", &x, &y);
        db disa = count (x, y, xa, ya), disb = count (x, y, xb, yb);
        e[i] = disa - disb;
        ans += disb;
    }
    sort (e + 1, e + n + 1);
    for (int i = 1; i <= k; i++)    ans += e[i];
    cout << fixed << setprecision (6) << ans << endl;
}

/*
在二维平面中有n只老鼠,有A,B两个洞,洞A的容量是k,洞B的容量是n-k,
汤姆来了,每只老鼠都要钻进洞里,给出洞A,B和每只老鼠的坐标,
安排老鼠进洞使老鼠进洞总路程最短。1<=n,k<=1e5,1<=坐标值<=1e9
允许误差1e-5
*/

//等价于两个数组sa,sb
//sa中选k个, sb中选n-k个,且不重叠,使得选中的数之和最小

//贪心

标签:老鼠,leq,int,d%,db,一道,y2,贪心
From: https://www.cnblogs.com/CTing/p/17329677.html

相关文章

  • 贪心_20230417
    452.用最少数量的箭引爆气球题目说明有一些球形气球贴在一堵用XY平面表示的墙面上。墙面上的气球记录在整数数组points,其中points[i]=[xstart,xend]表示水平直径在xstart和xend之间的气球。你不知道气球的确切y坐标。一支弓箭可以沿着x轴从不同点完全垂直地......
  • 从一道面试题来学习前台进程和后台进程、孤儿进程和僵尸进程
    1、面试题介绍以前面试,面试官问了一个问题,大意是:我们在终端中,通过执行pythonmain.py命令,会启动一台前台进程直到程序结束。现在我还是想通过执行pythonmain.py,启动一个后台进程,让后台进程运行我们的业务逻辑。这个时候应该怎么做呢?回答上面这道题,需要先了解什么是前台......
  • Fixed Point Guessing (交互题, 贪心,奇偶)
    思路: 保存有用信息,删除多余信息, 每一次查询会给出L,R内的所有数,那么如何利用这个条件,->统计在L,R区间的数的个数进一步发现,只有位置不变的数会在这个区间内, 统计在L,R区间的数的个数才会奇数,其他情况都是偶数这里可以去分类讨论一下因此以此来二分即......
  • 贪心_20230416
    134.加油站题目说明在一条环路上有N个加油站,其中第i个加油站有汽油gas[i]升。你有一辆油箱容量无限的的汽车,从第i个加油站开往第i+1个加油站需要消耗汽油cost[i]升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,......
  • Java中常用算法及示例-分治、迭代、递归、递推、动态规划、回溯、穷举、贪心
    场景1、分治算法的基本思想是将一个计算复杂的问题分成规模较小、计算简单的小问题求解,然后综合各个小问题,得到最终答案。2、穷举(又称枚举)算法的基本思想是从所有可能的情况中搜索正确的答案。3、迭代法(IterativeMethod)无法使用公式一次求解,而需要使用重复结构(即循环)重复执......
  • 一道初中数学几何题
    一道初中数学几何题题目来源:某秃头老师题面\(\triangleABD\)和\(\triangleCBD\)是两个全等的直角三角形。其中,\(\angleA=\angleC=90^{\circ}\),\(AB=CB=5\),\(CD=AD=12\)。\(M\),\(N\)分别是线段\(AB\),\(CD\)上的两个动点,且\(AM=CM\)。连接线段\(MN......
  • HDU 4313 Matrix (贪心)
    题目地址:HDU4313利用最小生成树的思想,这里是从大往下删,能删则删,不能删就留着。用个并查集维护下。代码如下:#include<iostream>#include<string.h>#include<math.h>#include<queue>#include<algorithm>#include<stdlib.h>#include<map>#include<set>......
  • HDU 4864Task(多校联合训练1)(贪心)
    题目地址:HDU4864这题又是一上来认为是最小费用流,但是边太多,果然,敲完交上去后不断TLE。。小优化了两次也没过。。。sad。。后来看了题解才发现是贪心。。。贪心也不好想。大体思路是很好想的,就是先都按时间从大到小排序,再遍历任务,从机器里找能匹配的,并在能匹配的里边找等级尽量小的......
  • 田忌赛马(贪心)------------看了一晚上,然后在CSDN和老师的帮助下我最终才完成____我好
    题目出自杭电TianJi--TheHorseRacing这个题感觉有很多坑。我这里用的是先从最坏马的角度开始。1.首先如果田忌的最坏马比不过国王的最坏马,此时田忌的最坏马肯定要输,但是要让他输的最有价值————用它换掉国王最好的马!2.如果田忌最坏的马能比得过国王最坏的马,此时就让田......
  • 2023.4.12学习随笔:学贪心学到数组循环
    代码随想录(programmercarl.com)在做这个题时候发现数组循环%没看懂,就开始琢磨这一点,查了很多资料都没有讲,可能是这个知识比较基础(嘿嘿我基础太差了)慢慢来吧~ 编程的时候,很多时候都会要求一个数在某一个范围内进行反复循环,0~100循环,0~5循环等等。一般的方法是使用if语句,当判断......