在花老师的指导下,每周4都有一个集会活动,俗称“浇水”活动。
具体浇水活动详情请见BZOJ3153
但这不是重点
花神出了好多题,每道题都有两个参考系数:代码难度和算法难度
花神为了准备浇花集会的题,必须找一道尽量适合所有人的题
现在花神知道每个人的代码能力x和算法能力y,一道题(代码难度X算法难度Y)对这个人的不适合度为 Max ( abs ( X – x ) , abs ( Y – y ) )
也就是说无论太难还是太简单都会导致题目不适合做(如果全按花神本人能力设题,绝对的全场爆0的节奏,太简单,则体现不出花神的实力)
当然不是每次都如花神所愿,不一定有一道题适合所有人,所以要使所有人的不合适度总和尽可能低
花神出了100001*100001道题,每道题的代码难度和算法难度都为0,1,2,3,……,100000
第一行一个正整数N,表示花神有N个学生,花神要为这N个学生选一道题
接下来N行,每行两个空格隔开的整数x[i],y[i],表示这个学生的代码能力和算法能力
一个整数,表示最小的不合适度总和
mjmjmj命题Stilwell制作数据
反人类的曼哈顿距离变形
|x1-x2|+|y1-y2|=max(|(x1+y1)-(x2+y2)|,|(x1-y1)-(x2-y2)|)
的逆变换
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #include<functional> #include<cmath> #include<cctype> #include<cassert> #include<climits> using namespace std; #define For(i,n) for(int i=1;i<=n;i++) #define Rep(i,n) for(int i=0;i<n;i++) #define Fork(i,k,n) for(int i=k;i<=n;i++) #define ForD(i,n) for(int i=n;i;i--) #define Forp(x) for(int p=pre[x];p;p=next[p]) #define RepD(i,n) for(int i=n;i>=0;i--) #define MEM(a) memset(a,0,sizeof(a)) #define MEMI(a) memset(a,127,sizeof(a)) #define MEMi(a) memset(a,128,sizeof(a)) #define INF (10000000000+10) #define F (1000000009) #define MAXN (100000+10) #define MAXXi (100000) #define eps 1e-7 typedef long long ll; int n,a[MAXN],b[MAXN],d[8][2]={{1,0},{-1,0},{0,1},{0,-1},{1,1},{1,-1},{-1,-1},{-1,1}}; double x[MAXN],y[MAXN]; ll calc(int mx,int my) { // cout<<mx<<' '<<my<<endl; ll ans=0; For(i,n) ans+=max(abs(mx-a[i]),abs(my-b[i])); return ans; } int main() { // freopen("bzoj3210.in","r",stdin); cin>>n; For(i,n) { scanf("%d%d",&a[i],&b[i]); x[i]=0.5*a[i]+0.5*b[i]; y[i]=0.5*a[i]-0.5*b[i]; } sort(x+1,x+1+n);sort(y+1,y+1+n); double mx=x[(1+n)/2],my=y[(1+n)/2]; double mx2=mx+my,my2=mx-my; ll ans=calc(trunc(mx2),trunc(my2)); Rep(i,8) { ans=min(ans,calc(trunc(mx2+d[i][0]),trunc(my2+d[i][1]))); } cout<<ans<<endl; return 0; }