首页 > 其他分享 >「题解」洛谷 P8529 [Ynoi2003] 赫露艾斯塔

「题解」洛谷 P8529 [Ynoi2003] 赫露艾斯塔

时间:2022-10-22 11:11:52浏览次数:87  
标签:P8529 洛谷 标记 经过 题解 sqrt 点数 平面 mathcal

构造半平面莫队?/jk

注意到对于一个半平面的直线,通过平移和旋转经过的点数,一定大于等于它们的对称差,因为对称差中的点会被经过奇数次,不在对称差中的点会被经过偶数次。那么可以将问题转化成构造出一个移动直线的方案,使得经过给出的每个直线,而且使得经过的点尽可能的小。

考虑一个事实,如果现在半平面的直线绕着一个点只改变斜率进行旋转,只会经过 \(\mathcal{O}(n)\)个点。

那么首先先随机撒 \(\mathcal{O}(\sqrt n)\) 个点,这样对于一个半平面的直线,它向下平移使得它遇上了第一个标记点,经过的点数期望是 \(\mathcal{O}(\sqrt n)\) 的。那么将这个半平面挂在这个标记点上,构造一个移动直线的方案:

首先从上一个标记点移动到当前标记点,然后把这个标记点上挂的半平面极角排序,一个个扫,先旋转得到应该具有的斜率,然后平移得到应该具有的截距,再平移回标记点,以此类推。

由于只有 \(\mathcal{O}(\sqrt n)\) 标记点,每次标记点之间移动最多经过 \(\mathcal{O}(n)\) 个点,所以这部分经过点数 \(\mathcal{O}(n\sqrt n)\) 个;在每个标记点处进行旋转,经过的点也是 \(\mathcal{O}(n)\) 个;标记点向挂着的半平面平移的时候,根据前面的结论,对于每个半平面是经过期望 \(\mathcal{O}(\sqrt n)\) 个点。所以总的经过点数是 \(\mathcal{O}((n+m)\sqrt n)\).

看上去常数很大,不过要考虑到实际上对称差的和是小于等于经过的点数,而且似乎也很难构造数据卡掉它,于是它还挺优秀的(

洛谷不知道为什么后面的点 UKE 了,还是从牛客交吧。

mt19937 rnd(time(NULL)^(ull)(new char));
const int N=200010;
int n,m,p[N],B;
ll x[N],y[N],a[N],b[N],c[N];
vector<pair<double,int>>vec[N];
signed main(){
	read(n,m);
	B=min(n,450);
	for(int i=1;i<=n;i++){
		read(x[i],y[i]);
		p[i]=i;
	}
	shuffle(p+1,p+n+1,rnd);
	for(int i=1;i<=m;i++){
		read(a[i],b[i],c[i]);
		int pos=0;
		ll mx=0;
		for(int j=1;j<=B;j++){
			ll o=a[i]*x[p[j]]+b[i]*y[p[j]]+c[i];
			if(o>0){
				if(!pos || o<mx){
					pos=j;
					mx=o;
				}
			}
		}
		if(!pos)pos=1;
		vec[pos].pb(mp(atan2(a[i],b[i]),i));
	}
	for(int i=1;i<=B;i++){
		sort(vec[i].begin(),vec[i].end());
		for(auto j:vec[i])cout << j.se << '\n';
	}
	return 0;
}

标签:P8529,洛谷,标记,经过,题解,sqrt,点数,平面,mathcal
From: https://www.cnblogs.com/do-while-true/p/16815614.html

相关文章

  • ABC266 ~ 273 题解
    缺省源#pragmaGCCoptimize(3)#include<bits/stdc++.h>namespace//tofoldthatjunkcode{#definefilein(x){freopen(x".in","r",stdin);}#definefile(......
  • Fabricating Sculptures 题解
    草草地写一篇题解,废话不多说暴力要拼成“^”型,考虑\(DP\)令\(f_{i,j}\)表示,总共有\(i\)个积木,其中底座占了\(j\)个积木,也就是说你还有\(i-j\)个积木来拼底座的......
  • CF1716C Robot in a Hallway题解
    \(2000\)分的DP题。题意给定一个\(2\)行\(n\)列的网格。机器人初始坐标为\((0,1)\),每一秒都可以向四周移动。每个格子有解锁时间,在该时间之前机器人不可以进入该......
  • CF1045G 题解
    前言题目传送门!更好的阅读体验?和模版稍有不同的cdq分治。思路cdq是离线算法,所以我们可以先给\(x_i\)离散化一下。同时,记录下\((x_i-r_i)\)与\((x_i+r_i)......
  • 关于LoRa常见问题解答
    前面的文章中,小编有写过LORA技术低功耗广域网络,在大大小小的行业活动中,一直都是物联网的一个热门话题。LoRa主要在全球免费频段运行,包括433、868、915MHz等。后来有很多......
  • 「题解」Codeforces 1730F Almost Sorted
    给定一个长度为\(n\)的置换\(p\),以及一个正整数\(k\).对于一个置换\(q\),要求对于所有满足\(1\leqi<j\leqn\)的\(i,j\),有以下不等式成立:\[p_{q_i}\leqp_{q_j}+......
  • accoders NOI #5014. 树上询问(query) 题解
    昨天刚刚做过一道类似的题,没想到在模拟赛当中出现了。题目描述有一棵\(n\)个结点的树,有\(m\)次询问,每次询问给你两个整数\(l,r\),问存在多少个整数\(k\)使得从\(l......
  • 顺丰科技智慧物流校园技术挑战赛 一份题解
    我只是做了代码裁缝的角色罢了目录​​试题地址​​​​1​​​​2​​​​3​​​​4​​​​5​​试题地址​​https://leetcode.cn/contest/sf-tech/​​1DFS判定有向图......
  • 题解 P5527 [Ynoi2012] NOIP2016 人生巅峰
    人生第一道Ynoi,同时也是1k通过。不卡常不难写,小清新Ynoi真的不多见了。前置知识:抽屉原理,树状数组,bitset,动态规划基础。首先考虑一个事实,当这个区间够长是必然有解的......
  • CF645E Intellectual Inquiry 题解
    传送门|无耻地宣传我的博客(矩乘代码在最后)看一眼题,没什么思路,那大概就是个dp了。先求已知序列的方案数。考虑怎么设计状态。因为本质不同,如果设\(f[i]\)表示,......