Regionals 2011 Europe - Southwestern

今天练了一场国外的区预赛的题目,除了个别题目卡了一会儿,整体做下来还是蛮顺的,最终8题

http://acm.hust.edu.cn:8080/judge/contest/view.action?cid=14846#rank

http://acm.hust.edu.cn:8080/judge/contest/view.action?cid=14846#overview

简单说一下几个题吧

C题:好题,感觉是做出来的题目中最难的吧,题目可以转换为给你n个坐标点(n<=100000),询问50000个点,对于每个点,输出点集中离这个点最近的点到这个点的欧几里得距离。

我们可以将答案写成绝对值的表达式,然后再去掉绝对值|ai-xi|+|bi-yi| 然后可以分情况讨论a 与 x     b 与y的关系,然后就可以去掉绝对值了

就以a>=x   b>=y为例吧

去掉绝对值后式子变成了a+b-x-y那么我们所需要求的便是-x-y的最小值而且x是小于等于a的,看到了没,就是一个区间最值啊,把x建成线段树,-x-y当做值插入线段树,每枚举一个a b,就将点集中所有y坐标小于等于b的点全部插入,然后查询1~a 所在区间的最小值mi ,用mi+a+b来更新答案

I 题:给你一个多边形上三个点的坐标,问你这个多边形最少可以为几边形,由于最多不超过1000,所以可以考虑暴力枚举边数,那么我们就知道了单位中心角2*pi/边数,然后求出三角形的外心,然后验证内部这三个角是否都为单位中心角的整数倍即可,判断一个浮点数是否是另一个数的整数倍可以判断三次

bool check(double cha,double mi)
{
int i;
int tmp= cha/mi;
double a=1.0*(tmp+1)*mi;
double b=1.0*(tmp-1)*mi;
double c=1.0*tmp*mi;
if(fabs(a-cha)<eps || fabs(b-cha)<eps || fabs(c-cha)<eps) return true;
return false;
}

F题:暴力枚举+表达式计算

G题:线段树敲了一大半才发现可以单调队列,囧,但已经敲了就交一个呗,于是果断超时,后来改用单调队列立刻AC

先破环,在原数组的后面拼接上一个一模一样的数组即可,然后处理出前缀和sum,那么在判断某一段连续区间(长为n)的前缀和是否都大于等于0的时候只需要判断这段区间内最小的sum到开头的差是否大于0,由于求的是定长区间的最值,所以可以用单调队列搞

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值