35pts TLE求调(玄关
查看原帖
35pts TLE求调(玄关
749665
huta0楼主2024/1/6 11:50
#include<iostream>
#include<cmath>
#include<map>
#define rep(a,b,c) for(int a=b;a<=c;a++)
#define a_all a.begin(),a.end()
#define int long long
using namespace std;
#define int long long
struct coord {
	int x,y;
} a[400010];
int n,m,k;
int disk=-2e9;
map<pair<int,int>,bool> vis;
int calc(int nx,int ny) {
	int ans = 0;
	for(int i=1;i<=k;i++)
	   ans+=abs(nx-a[i].x)+abs(ny-a[i].y);
	return ans;   
}
bool of(int nx,int ny) {
	return (nx<1||nx>n||ny<1||ny>m);
}
signed main() {
	cin.tie(0); cout.tie(0);
	ios::sync_with_stdio(0);
	cin>>n>>m>>k;
	rep(i,1,k) {
		cin>>a[i].x>>a[i].y;
		vis[make_pair(a[i].x,a[i].y)]=1;
	}
	rep(i,1,k) {
		int ax=a[i].x-1,ay=a[i].y;
		int bx=a[i].x+1,by=a[i].y;
		int cx=a[i].x,cy=a[i].y+1;
		int dx=a[i].x,dy=a[i].y-1;
		
		int d1=calc(ax,ay),d2=calc(bx,by),d3=calc(cx,cy),d4=calc(dx,dy);
		if(of(ax,ay) || vis[make_pair(ax,ay)]) d1=-2e9;
		if(of(bx,by) || vis[make_pair(bx,by)]) d2=-2e9;
		if(of(cx,cy) || vis[make_pair(cx,cy)]) d3=-2e9;
		if(of(dx,dy) || vis[make_pair(dx,dy)]) d4=-2e9;
		
		disk=max(disk,max(d1,max(d2,max(d3,d4))));
		//cout<<"reg "<<d1<<" "<<d2<<" "<<d3<<" "<<d4<<endl;
	}
	int ax=1,ay=n;
	int bx=1,by=1;
	int cx=n,cy=1;
	int dx=n,dy=m;
		
	int d1=calc(ax,ay),d2=calc(bx,by),d3=calc(cx,cy),d4=calc(dx,dy);
	if(of(ax,ay) || vis[make_pair(ax,ay)]) d1=-2e9;
	if(of(bx,by) || vis[make_pair(bx,by)]) d2=-2e9;
	if(of(cx,cy) || vis[make_pair(cx,cy)]) d3=-2e9;
	if(of(dx,dy) || vis[make_pair(dx,dy)]) d4=-2e9;
	
	//cout<<"reg "<<d1<<" "<<d2<<" "<<d3<<" "<<d4<<endl;	
	disk=max(disk,max(d1,max(d2,max(d3,d4))));
	cout<<disk;
    return 0;
}
2024/1/6 11:50
加载中...