首页 > 其他分享 >海贼OJ #251. 士兵 题解 排序+中位数(数学思维题)

海贼OJ #251. 士兵 题解 排序+中位数(数学思维题)

时间:2025-01-07 16:54:49浏览次数:9  
标签:排序 OJ int 题解 中位数 long ans 251 海贼

题目链接:https://oj.haizeix.com/problem/251

解题思路:

最短总距离是所有点到中位数的距离之和。

对 \(y\):排序求中位数。

对 \(x\):对 \(x\) 排序,然后对排序后的 \(x_i - i\) 排序,然后求最短距离。

对 \(x_i - i\) 进行处理,能保证最终的 \(x_i\) 各不一样且相邻。

示例程序:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;

long long cal(int a[], int n) {
	long long ans = 0;
	for (int i = 1, j = n; i < j; i++, j--)
		ans += a[j] - a[i];
	return ans;
}

int n, x[maxn], y[maxn];

int main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) scanf("%d%d", x+i, y+i);
	sort(x+1, x+n+1);
	for (int i = 1; i <= n; i++)
        x[i] -= i;
    sort(x+1, x+n+1);
	sort(y+1, y+n+1);
	printf("%lld\n", cal(x, n) + cal(y, n));
	return 0;
}

标签:排序,OJ,int,题解,中位数,long,ans,251,海贼
From: https://www.cnblogs.com/quanjun/p/18657955

相关文章

  • CS61B srping 2018 proj1A https://sp18.datastructur.es/
    proj1A数据结构skeleton地址开始这个proj之前,至少应该对SLList,DLList,AList有所了解介绍在proj1A里要用list和Array来创建“DoubleEndedQueue”,在接下来的proj1B里要对应编写测试。LinkedListDeque.javaandArrayDeque.java是这个proj里边要操作的文件,推荐使用intel......
  • [题目记录]loj#560 Menci的序列
    loj#560Menci的序列题意给出一个长为\(n\),由+和*组成的序列和常数\(k\).对于一个这样的序列,定义其权值为:初始权值为0,从左到右遍历序列如果当前位是+就把权值\(+1\)如果当前位是*就把权值\(\times2\)对\(2^k\)取模.求原序列的一个子序列,......
  • 题解:P1541 [NOIP2010 提高组] 乌龟棋
    基础动态规划。这道题的题目条件显然满足阶段性和无后效性,那么有一个直观的思路就是把当前所处格子和四种卡片的使用次数作为状态。但是如果按照上面的想法,数组空间是无法开下的,所以我们稍微变一下思路,把四种卡片的使用数量作为状态,对于当前所处格子的话可以直接计算出来,这样数......
  • P8037 [COCI2015-2016#7] Prokletnik 题解
    题意定义一个区间$l,r$为好的当且仅当最小值为$a_l$且最大值为$a_r$或最大值为$a_l$且最小值为$a_r$。我们先考虑最小值为$a_l$且最大值为$a_r$的,另一个我们翻转过来在搞一遍就好了。先考虑将询问离线按$r$排序,容易发现,对于每个右端点$r$对应的合法左端点是......
  • 信奥OJ的搭建
    第一步,服务器申请选择一:免费云服务器,免费虚拟主机如:阿贝云阿贝云提供了免费的云服务器和免费的云虚拟主机,可根据自己的实际应用情况选择。首先注册一个账户,然后需要支付0.3元做一个实名认证,如果实名认证成功了大概率会开通成功。如果失......
  • E. Beautiful Array(题解)
    原题链接:https://codeforces.com/problemset/problem/1986/E思路:排序,取模,思维关于操作:ai=ai+k;若要使a1+m1*k==a2+m2*k;则当a1,a2满足a1%k==a2%k,a1,a2可以满足a1+m1*k==a2+m2*k;并在需要(|a1-a2|)/k次操作。将a数组取模后,用vector分别储存,a1和a2相差越小,需要的次数越......
  • 题解:CF2043C Sums on Segments
    题意给你一个长度为\(n\)的数组\(a\),满足\(a\)中有且仅有一个不为\(1\)也不为\(-1\)的数(以下简称特殊的值),剩余的数都是\(1\)或\(-1\)。求所有可能的子区间的和的值(下文简称答案)。从小到大一次输出每一个值,每个值只输出一遍。题解首先,我们发现,如果把那个特殊的值考......
  • 题解:CF2057B Gorilla and the Exam
    CF2057BGorillaandtheExam思路不难发现其实每次操作就是把数组\(a\)内所有值为\(y\)的数都删除掉(\(y\)为数组\(a\)中的莫一个值)。所以我们需要把尽可能多的数都变成原来数组里出现次数最多的数(从出现数量最少的开始,这样能使得消失的数值种类最大化)。首先想到使用数组......
  • 题解:P11507 [ROIR 2017 Day 1] 计算器
    P11507[ROIR2017Day1]计算器思路简单的动态规划。\(dp_{i,j,k}\)表示使用了\(i\)次按钮A,\(j\)次按钮B和\(k\)次按钮C。转移式:\[\begin{cases}dp_{i+1,j,k}=\min(dp_{i+1,j,k},\lfloordp_{i,j,k}\div2\rfloor);\\dp_{i,j+1,k}=\min(dp_{i,j+1,k},\lfloo......
  • QOJ964. Excluded Min 题解
    QOJ原题链接简要题意设\(S\)为一个可重非负整数集合,假设\(x\)为\(S\)中的一个出现次数\(\ge2\)的元素,你可以将\(x\)改成\(x+1\)或\(x-1\)。定义\(f(S)\)表示对\(S\)进行上述操作任意次所能达到的最大\(\operatorname{mex}\)。给定一个长度为\(n\)的......