月赛 B 咋做
  • 板块学术版
  • 楼主linxuanrui
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/12/24 18:00
  • 上次更新2023/12/24 20:08:42
查看原帖
月赛 B 咋做
857323
linxuanrui楼主2023/12/24 18:00

感觉是三分,但是最后有一些地方卡了……

#include<bits/stdc++.h>
#define int long long
#define endl '\n'
typedef long long ll;
using namespace std;
const int N = 4e5 + 5;
int n,m,k,x[N],y[N],ans;
map<pair<int,int>,bool> mp;
int calc(int a[N],int pos,int n){
	if(pos < 1 || pos > n)return INT_MIN;
	int ans = 0;
	for(int i = 1;i <= k;i++)ans += abs(a[i] - pos);
	return ans;
}
int get(int a[N],int n){
	int l = 0,r = n + 1,ans = 1;
	while(r - l > 2){
		int mid1 = l + (r - l) / 3,mid2 = r - (r - l) / 3;
		if(calc(a,mid1,n) >= calc(a,mid2,n))r = mid2;
		else l = mid1;
	}
	for(int i = l;i <= r;i++){
		if(calc(a,i,n) > calc(a,ans,n))ans = i;
	}
	return ans;
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> m >> k;
	for(int i = 1;i <= k;i++)cin >> x[i] >> y[i],mp[{x[i],y[i]}] = true;
	sort(x + 1,x + k + 1);
	sort(y + 1,y + k + 1);
	int xx = get(x,n),yy = get(y,m);
	int ans = 0;
	///???
	cout << ans;
}

2023/12/24 18:00
加载中...