摘要: 考虑把所有石头翻到直线y=x同侧,此时可以保证篱笆长度最短。这种最短的篱笆一共有4种可能,枚举每种可能然后$O(n)$检验求出答案即可。#includeconst int N=1000000,inf=~0U>>1;int n,i,x[N],y[N],w[N],lx=inf,rx,ly=inf,ry,... 阅读全文
posted @ 2015-06-30 21:35 Claris 阅读(577) 评论(0) 推荐(0) 编辑
摘要: 从小到大枚举高度i:对于所有高度为i的点x,将它与它四周相邻的高度不超过i的点所在的集合合并对于所有高度为i的城市x,如果它所在集合没有放置水泵,则需要放置并查集维护,时间复杂度$O(nm)$。#include#define N 1010int n,m,i,j,k,x,y,a[N][N],id[N]... 阅读全文
posted @ 2015-06-30 20:07 Claris 阅读(601) 评论(2) 推荐(0) 编辑
摘要: 首先1与i交换,n与i交换,i与i+1交换的可以$O(n)$算出。然后只需要考虑i与x交换(11)。设a[i]=h[i-1]b[i]=h[i+1]f[i]=|h[i-1]-h[i]|+|h[i+1]-h[i]|c[i]=min(a[i],b[i])d[i]=max(a[i],b[i])则交换i与x对... 阅读全文
posted @ 2015-06-30 18:33 Claris 阅读(755) 评论(0) 推荐(0) 编辑
摘要: 将多边形转化为如下的环:1到2的边,角2,2到3的边,角3,...,n-1到n的边,角n,n到1的边,角1然后枚举对称轴,如果i是对称轴,那么[i-n,i+n]是一个回文串用Manacher算法实现即可。时间复杂度$O(n)$。#include#define N 100010typedef long... 阅读全文
posted @ 2015-06-30 12:16 Claris 阅读(500) 评论(0) 推荐(0) 编辑