题意与分析 (CodeForces 617C)

题意是这样的:一个花圃中有若干花和两个喷泉,你可以调节水的压力使得两个喷泉各自分别以\(r_1\)和\(r_2\)为最远距离向外喷水。你需要调整\(r_1,r_2\)的值使得所有的花都能被水所灌溉——换句话说,每一朵花要么到第一个喷泉的距离不超过\(r_1\),要么到第二个喷泉的距离不超过\(r_2\)。当然如果两个条件都满足也是可以的。你需要用尽可能少的水来实现以上要求,也就是说使得\(r_1^2+r_2^2\)尽可能的小。找出这个最小值。

那么问题来了,这里可能会有人YY出一个比较美好的\(O(n)\)的算法:既然每个人都是不是取1就是取2,那么我们遍历一遍,每次遍历选择那个令半径变大尽可能小的,那就完事了。但是并不可以,这样会受到顺序的制约,就是说不同顺序的答案是不一样的,不是正确的贪心。

那么我们只能退而求其次:枚举每个点,硬点它的大小为第一个半径,然后再枚举这\(n\)个点,比它大的就归第二个半径,然后这样一个\(n^2\)的算法就能够得到结果。

更好的是一个\(O(n\log n)\)的算法。先排序(pair),然后维护一个倒序的与第二个喷泉的最大值。这样,当我们循环到第\(i\)个的时候,如果采用第\(i\)个半径,前\(i\)个一定能被覆盖,只要保证剩下的被覆盖就可以了——也就是取我们维护的那个最大值。这其实是上面那个美好的YY的变种。这里就不赘述了。

代码

/*
* Filename: cfr340d2c.cpp
* Date: 2018-11-09
*/ #include <bits/stdc++.h> #define INF 0x3f3f3f3f
#define PB emplace_back
#define MP make_pair
#define fi first
#define se second
#define rep(i,a,b) for(repType i=(a); i<=(b); ++i)
#define per(i,a,b) for(repType i=(a); i>=(b); --i)
#define ZERO(x) memset(x, 0, sizeof(x))
#define MS(x,y) memset(x, y, sizeof(x))
#define ALL(x) (x).begin(), (x).end() #define QUICKIO \
ios::sync_with_stdio(false); \
cin.tie(0); \
cout.tie(0);
#define DEBUG(...) fprintf(stderr, __VA_ARGS__), fflush(stderr) using namespace std;
using pi=pair<int,int>;
using repType=int;
using ll=long long;
using ld=long double;
using ull=unsigned long long; int
main()
{
QUICKIO
ll n,x1,y1,x2,y2; cin>>n>>x1>>y1>>x2>>y2;
vector<pi> vec;
rep(i,1,n)
{
ll x,y; cin>>x>>y;
vec.PB(x,y);
}
ll minans=9e17;
rep(i,0,n)
{
ll r12,r22=0;
if(i==n)
r12=0;
else r12=(vec[i].fi-x1)*(vec[i].fi-x1)+(vec[i].se-y1)*(vec[i].se-y1);
rep(j,0,n-1)
{
ll tmp1=(vec[j].fi-x1)*(vec[j].fi-x1)+(vec[j].se-y1)*(vec[j].se-y1);
ll tmp2=(vec[j].fi-x2)*(vec[j].fi-x2)+(vec[j].se-y2)*(vec[j].se-y2);
if(tmp1<=r12) continue;
else
{
r22=max(tmp2, r22);
}
}
//cout<<r12<<" "<<r22<<endl;
minans=min(minans, r22+r12);
}
cout<<minans<<endl; return 0;
}

「日常训练」Watering Flowers(Codeforces Round #340 Div.2 C)的更多相关文章

  1. 「日常训练」ZgukistringZ(Codeforces Round #307 Div. 2 B)

    题意与分析(CodeForces 551B) 这他妈哪里是日常训练,这是日常弟中弟. 题意是这样的,给出一个字符串A,再给出两个字符串B,C,求A中任意量字符交换后(不限制次数)能够得到的使B,C作为 ...

  2. 「日常训练」Queue(Codeforces Round 303 Div.2 D)

    简单到让人不敢相信是D题,但是还是疏忽了一点. 题意与分析 (Codeforces 545D) 题意:n人排队,当一个人排队的时间超过他需要服务的时间就会厌烦,现在要求一个最优排列使得厌烦的人最少. ...

  3. 「日常训练」Woodcutters(Codeforces Round 303 Div.2 C)

    这题惨遭被卡..卡了一个小时,太真实了. 题意与分析 (Codeforces 545C) 题意:给定\(n\)棵树,在\(x\)位置,高为\(h\),然后可以左倒右倒,然后倒下去会占据\([x-h,x ...

  4. 「日常训练」Skills(Codeforce Round #339 Div.2 D)

    题意(CodeForces 614D) 每个人有\(n(n\le 10^5)\)个技能,技能等级都在\([0,10^9]\)的范围,每个技能有一个当前等级,所有技能的最高等级都为A.一个人的力量被记做 ...

  5. 「专题训练」k-Tree(CodeForces Round #247 Div.2 C)

    题意与分析(Codeforces-431C) 题意是这样的:给出K-Tree--一个无限增长的树,它的每个结点都恰有\(K\)个孩子,每个节点到它\(K\)个孩子的\(K\)条边的权重各为\(1,2, ...

  6. 「专题训练」Boredom(CodeForces Round #260 Div.1 A)

    题意(Codeforces-455A) 给你\(n\)个数,你每次可以选择删除去一个数\(x\)获得\(x\)分,但是所有为\(x+1\)和\(x-1\)的数都得删去.问最大获得分数. 分析 这是一条 ...

  7. [Codeforces Round #340 (Div. 2)]

    [Codeforces Round #340 (Div. 2)] vp了一场cf..(打不了深夜的场啊!!) A.Elephant 水题,直接贪心,能用5步走5步. B.Chocolate 乘法原理计 ...

  8. Codeforces Round #340 (Div. 2) C. Watering Flowers 暴力

    C. Watering Flowers 题目连接: http://www.codeforces.com/contest/617/problem/C Descriptionww.co A flowerb ...

  9. 「日常训练」Alternative Thinking(Codeforces Round #334 Div.2 C)

    题意与分析 (CodeForces - 603A) 这题真的做的我头疼的不得了,各种构造样例去分析性质... 题意是这样的:给出01字符串.可以在这个字符串中选择一个起点和一个终点使得这个连续区间内所 ...

随机推荐

  1. vue - 简单实例(vue-router + webpack + vuex)

    分享 + 实践  基于公司部分产品技术栈转型使用vue,部分同事需要学习一下,快速上手,那么我很荣幸的成为了给大家分享vue技术栈的‘ ’导师‘,在这里我分享一下: 讲解大纲为:(我是有一份PPT的, ...

  2. php函数:call_user_func

    前段时间浏览文档发现一个有意思的PHP函数:call_user_func [文档地址] 函数作用:该函数主要用于通过函数名去调用该函数 例如: function test(){ echo " ...

  3. 学会WCF之试错法——客户端调用基础

    1当客户端调用未返回结果时,服务不可用(网络连接中断,服务关闭,服务崩溃等) 客户端抛出异常 异常类型:CommunicationException InnerException: Message: ...

  4. Spring自定义注解(验证身份证+性别+地区)

    第一步:定义注解 PersonFormId: package com.wbg.maven1128.demo_formatter; import java.lang.annotation.*; @Doc ...

  5. 撸一个简单的MVVM例子

    我个人以为mvvm框架里面最重要的一点就是VM这部分,它要与Model层建立联系,将Model层转换成可以被View层识别的数据结构:其次也要同View建立联系,将数据及时更新到View层上,并且响应 ...

  6. vue入门学习示例

    鄙人一直是用angular框架的,所以顺便比较了一下. <!DOCTYPE html> <html lang="en"> <head> < ...

  7. 初窥UIKit Dynamics

    原文来自这里. iOS7中可以方便的给物体添加动态物理特性,主要使用到UIDynamicAnimator,UIDynamicBehavior以及实现了UIDynamicItem协议的对象.在iOS7中 ...

  8. iOS universallinks唤醒app

    从iOS9之后,苹果就推出了这个功能,用来唤醒外部app.这个功能在那些电商app上使用尤其广泛,当你打开对应的h5网页后,上面跳出一个是否跳转app的按钮. 现在iOS11已经基本覆盖,iOS12也 ...

  9. 微信网页授权-公众号支付(获取openid、用户信息等)

    名词解释: openid 用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID 业务功能描述:实现H5页面可以在微信浏览器里面进行微信支付,所以需要 ...

  10. ubuntu—终端安装mysql

    ---恢复内容开始--- Step 1 : 安装指令 ~$ sudo apt-get install mysql-server Step 2: 查看是否正常安装 ~$ ps aux | grep my ...