【NOIP模擬】棋盤問題
阿新 • • 發佈:2018-12-15
題目:棋盤問題
解析:
切比雪夫距離轉曼哈頓距離。
於是字首和,於是題解。。。
程式碼:
#include <bits/stdc++.h> #define int long long using namespace std; const int Max=1000010; int n,m,ans,t; int x[Max],y[Max]; int sum1[Max],sum2[Max]; inline int get_int() { int x=0,f=1; char c; for(c=getchar();(!isdigit(c))&&(c!='-');c=getchar()); if(c=='-') f=-1,c=getchar(); for(;isdigit(c);c=getchar()) x=(x<<3)+(x<<1)+c-'0'; return x*f; } inline void print(int x) { if(x>9) print(x/10); putchar('0'+x%10); } signed main() { t=get_int(); while(t--) { n=get_int(),m=get_int(); for(int i=1;i<=n;i++) { int x1=get_int(),y1=get_int(),tx=x1-y1,ty=x1+y1; x[i]=tx,y[i]=ty; } sort(x+1,x+n+1),sort(y+1,y+n+1); for(int i=1;i<=n;i++) sum1[i]=sum1[i-1]+x[i],sum2[i]=sum2[i-1]+y[i]; while(m--) { ans=0; int x1=get_int(),y1=get_int(),tx=x1-y1,ty=x1+y1; int pos=upper_bound(x+1,x+n+1,tx)-x-1; ans+=2*(pos*tx-sum1[pos])+sum1[n]-n*tx; pos=upper_bound(y+1,y+n+1,ty)-y-1; ans+=2*(pos*ty-sum2[pos])+sum2[n]-n*ty; print(ans/2),putchar('\n'); } } return 0; }