首页 > 其他分享 >每日一题- Jump Distance Sum

每日一题- Jump Distance Sum

时间:2024-07-30 14:19:15浏览次数:13  
标签:Distance x1 曼哈顿 Sum 距离 Jump x2 y1 y2

https://www.luogu.com.cn/problem/AT_abc351_e
*这是我的第一个随笔,请大佬们指正。

  1. 数学知识https://oi-wiki.org/geometry/distance/
    *曼哈顿距离:在二维空间内,两个点之间的曼哈顿距离(Manhattan distance)为它们横坐标之差的绝对值与纵坐标之差的绝对值之和。设点 A(x1,y1),B(x2,y2),则 A,B 之间的曼哈顿距离用公式可以表示为:d(A,B)=|x1-x2|+|y1-y2|。
    *切比雪夫距离:在二维空间内,两个点之间的切比雪夫距离为它们横坐标之差的绝对值与纵坐标之差的绝对值的最大值。设点 A(x1,y1),B(x2,y2),则 A,B 之间的切比雪夫距离用公式可以表示为:d(A,B)=max(|x1-x2|, |y1-y2|)。
  2. 题目大意
  3. 解题思路
    这只兔子是斜着走的,所以它斜着走一步步数加1,也就相当于从两点之间的距离就是切比雪距离max(|x1-x2|, |y1-y2|),这里我们可以通过将曼哈顿距离转换为切比雪距离:
    证明如下:
    假设 A(x1,y1),B(x2,y2),我们把曼哈顿距离中的绝对值拆开,能够得到四个值,这四个值中的最大值是两个非负数之和,即曼哈顿距离。则 A,B 两点的曼哈顿距离为:
    \begin{aligned}
    d(A,B)&=|x1-x2|+|y1-y2|=\max\begin{Bmatrix}x1-x2+ y1-y2,x1-x2+y2-y1,x2-x1+y1-y2,x2-x1+y2-y1\end{Bmatrix}\
    &= \max(|(x1+y1)-(x2+y2)|,|(x1-y1)-(x2-y2)|)
    \end{aligned}
    我们很容易发现,这就是 (x1+y1,x1-y1), (x2+y2,x2-y2) 两点之间的切比雪夫距离。所以将每一个点 (x,y) 转化为 (x+y,x-y),新坐标系下的切比雪夫距离即为原坐标系下的曼哈顿距离。
    我们可以通过将坐标系转个45度来实现正常的上下左右,这里还可以发现题目要分奇偶,分段相加。
    具体代码如下:
点击查看代码
#include<bits/stdc++.h>
#define ok ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define fo(i,x,y) for(int i=x;i<=y;i++)
#define sd(a) cin>>a
#define sdd(a,b) cin>>a>>b
#define sddd(a,b,c) cin>>a>>b>>c
#define st(a) cout<<a<<endl
#define int long long 
using namespace std;
const int N=200010;
int x[N],y[N],nowx[N],nowy[N];
int ans,n,cnt,sum;
void solve(){
	sort(nowx+1,nowx+1+cnt);
	sort(nowy+1,nowy+1+cnt);
	for(int i=1,sum=0;i<=cnt;i++)ans+=nowx[i]*(i-1)-sum,sum+=nowx[i];
	for(int i=1,sum=0;i<=cnt;i++)ans+=nowy[i]*(i-1)-sum,sum+=nowy[i];
}
signed main(){
	ok;
	sd(n);
	fo(i,1,n)sdd(x[i],y[i]);
    fo(i,1,n){
    	if((x[i]+y[i])&1)nowx[++cnt]=x[i]+y[i],nowy[cnt]=x[i]-y[i];
	}
	solve();
	cnt=0;
	fo(i,1,n){
		if(!((x[i]+y[i])&1))nowx[++cnt]=x[i]+y[i],nowy[cnt]=x[i]-y[i];
	}
	solve();
	st(ans/2);
	return 0;
}

标签:Distance,x1,曼哈顿,Sum,距离,Jump,x2,y1,y2
From: https://www.cnblogs.com/yueluoksguilu/p/18332114

相关文章

  • P9058 [Ynoi2004] rpmtdq 与 P9678 [ICPC2022 Jinan R] Tree Distance
    思路:注意到点对数量有\(N^2\)个,考虑丢掉一些无用的点对。对于点对\((x_1,y_1),(x_2,y_2)\),满足\(x_1\lex_2<y_2\ley_1\),即区间\([x_2,y_2]\)被\([x_1,y_1]\)包含,此时满足若询问到了\([x_1,y_1]\),则一定会询问到\([x_2,y_2]\)。若满足\(\operatorname{dis}(x_1......
  • Pulsar客户端消费模式揭秘:Go 语言实现 ZeroQueueConsumer
    前段时间在pulsar-client-go社区里看到这么一个issue:import"github.com/apache/pulsar-client-go/pulsar"client,err:=pulsar.NewClient(pulsar.ClientOptions{URL:"pulsar://localhost:6650",})iferr!=nil{log.Fatal(err)}consumer,er......
  • Python反编译失败。 (不支持的操作码:JUMP_IF_NOT_EXC_MATCH)
    我尝试使用“pycdc.exe”反编译使用pycdc.exe失败。因为错误“不支持的操作码:JUMP_IF_NOT_EXC_MATCH”在此处输入图像描述使用pycdc.exe失败。因为错误“不支持的操作码:JUMP_IF_NOT_EXC_MATCH”你知道我为什么失败吗?(我试图编译的.pyc似乎是3.10版本)......
  • SMU Summer 2024 div2 3rd
    文章目录TheThirdWeek一、前言二、算法1.KMP算法2.线性DP<1>(最长上升子序列II)3.背包DP<1>(「木」迷雾森林)4.其它<1>(Ubiquity)三、总结TheThirdWeek战略上藐视敌人,战术上重视敌人————毛泽东主席一、前言周六打了场cf,只过了俩题而且比较慢,给我的id上......
  • PTZ summer 2021 Day 5 D Interval
    记\([l,r]\times[a,b]\)表示区间所有的\((x,y),x\in[l,r],y\in[a,b]\)先考虑离散化,对每一个极小区间\((x,y)\)分别求解,假设有\(n\)给定区间包含它若\(n=1\),那么可以使\([1,i_1]\times[i_1,n]\)加上\(1\)如果\(n=2\),如果按照\(n=1\)的做法会重复计算,那么可......
  • SMU Summer 2024 Contest Round 8
    SMUSummer2024ContestRound8Product思路注意到\(\prod\limits_{i=1}^NL_i\le10^5\),也就是说N不会超过16,因为\(2^{17}>10^5\),所以我们可以直接暴搜。代码#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;intmain(){ios::sync_with......
  • SMU Summer 2024 Contest Round 7
    BuyanInteger1.这题是二分答案,而不是公式拿来整除,以为是整除找了半天自己的错误,其实二分答案一发就能过。#include<bits/stdc++.h>#defineintlonglong#defineendl'\n'usingnamespacestd;typedefpair<int,int>pii;#definexfirst#defineysecond#defineall......
  • [AGC056D] Subset Sum Game
    [AGC056D]SubsetSumGame题面翻译一块黑板上写着\(n\)个整数。第\(i\)个整数记作\(a_i\)。保证\(n\)是偶数。此外,给定\(L,R\)。Alice和Bob在玩一个游戏。他们轮流操作,Alice先手。在每一轮中,玩家需要选择一个写在黑板上的数,并擦掉它。游戏会在\(n\)轮后结束。......
  • P3131 [USACO16JAN] Subsequences Summing to Sevens S
    传送锚点:[USACO16JAN]SubsequencesSummingtoSevensS-洛谷题目描述FarmerJohn's\(N\)cowsarestandinginarow,astheyhaveatendencytodofromtimetotime.EachcowislabeledwithadistinctintegerIDnumbersoFJcantellthemapart.FJwould......
  • SMU Summer 2024 Contest Round 7
    1.GameonRanges原题链接:http://162.14.124.219/contest/1011/problem/B看懂英文后进行排序,按照区间长度从短到长,起始数字从小到大来排序,再依次标记赋值,模拟这个过程即可查看代码#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;inta[1000000],b[100......