看守题解

看守题解

此题是这一题的简化版,
这道题看上去很难,曼哈顿距离之和就足以吓跑一大堆人,
但我们一看,D<=4,这就可以搞一套骚操作了,
我们试着去掉绝对值,会化成类似这样的式子:
\(x_{1}-y_{1}+y_{2}-x_{2}+y_{3}-x_{3}+x_{4}-y_{4}=(x_{1}-x_{2}-x_{3}+x_{4})-(y_{1}-y_{2}-y_{3}+y_{4})=(x_{1}-x_{2}-x_{3}+x_{4})+(-y_{1}+y_{2}+y_{3}-y_{4})\)
将其转化为二进制,0代表-,1代表+,
则最大曼哈顿距离为,相同0、1序列的最大差值,或与(1< 求出每种0、1序列的最大值和最小值,ans跟差值取max就行了

#include
#define ll long long
#define re register
using namespace std;
const int N=1e6+6,inf=2e9;
struct xd{
   int z[17];
}p[N];
int n,k,P,t[7],ans,minx,maxx;
inline int read(){
   int T=0,F=1; char ch=getchar();
   while(ch<'0'||ch>'9'){if(ch=='-') F=-1; ch=getchar();}
   while(ch>='0'&&ch<='9') T=(T<<3)+(T<<1)+(ch-48),ch=getchar();
   return F*T;
}
int main(){
    n=read(),k=read(),P=(1<

你可能感兴趣的:(看守题解)