hdu 4766 Network

news/2024/12/22 22:53:56/

长春网络赛的题。


用的暴力。


XB看了题目,然后直接说他的思路,我俩讨论后敲的,我也没怎么看题。


我的做法是,先将额外的那个点(第一行输入M点),与每个hero为半径的圆求交点,若交点到各个hero的距离小于等于d,则最短是M到交点

所有hero的点以d为半径的圆求交,所交区域如果放上路由器一定能覆盖到所有的hero,所以变成M到这个区域的点的最短距离。

由于第一步的操作,所以M到点的最小距离的那个点一定是在相交圆弧的交点上,所以枚举交点,找最短距离。。。


复杂度N^3,太暴力了。

#include <set>
#include <queue>
#include <stack>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <limits.h>
#include <string.h>
#include <string>
#include <algorithm>
#define MID(x,y) ( ( x + y ) >> 1 )
#define L(x) ( x << 1 )
#define R(x) ( x << 1 | 1 )
#define FOR(i,s,t) for(int i=(s); i<(t); i++)
#define BUG puts("here!!!")
#define STOP system("pause")
#define file_r(x) freopen(x, "r", stdin)
#define file_w(x) freopen(x, "w", stdout)using namespace std;const int MAX = 1010;
const double eps = 1e-8;
const double INF = 1e30;
double d;
struct point{double x, y;void get(){scanf("%lf%lf", &x, &y);}
};
point M;
bool dy(double x,double y)	{	return x > y + eps;}	// x > y 
bool xy(double x,double y)	{	return x < y - eps;}	// x < y 
bool dyd(double x,double y)	{ 	return x > y - eps;}	// x >= y 
bool xyd(double x,double y)	{	return x < y + eps;} 	// x <= y 
bool dd(double x,double y) 	{	return fabs( x - y ) < eps;}  // x == y
double disp2p(point a,point b) //  a b 两点之间的距离 
{return sqrt( ( a.x - b.x ) * ( a.x - b.x ) + ( a.y - b.y ) * ( a.y - b.y ) );
}
bool operator==(point a, point b)
{return dd(a.x, b.x) && dd(a.y, b.y);
}
point c[MAX];point l2l_inst_p(point u1,point u2,point v1,point v2)
{point ans = u1;double t = ((u1.x - v1.x)*(v1.y - v2.y) - (u1.y - v1.y)*(v1.x - v2.x))/((u1.x - u2.x)*(v1.y - v2.y) - (u1.y - u2.y)*(v1.x - v2.x));ans.x += (u2.x - u1.x)*t;ans.y += (u2.y - u1.y)*t;return ans;
}
void l2c_inst_p(point c,double r,point l1,point l2,point &p1,point &p2)
{point p = c;double t;p.x += l1.y - l2.y;p.y += l2.x - l1.x;p = l2l_inst_p(p,c,l1,l2);t = sqrt(r*r - disp2p(p,c)*disp2p(p,c))/disp2p(l1,l2);p1.x = p.x + (l2.x - l1.x)*t;p1.y = p.y + (l2.y - l1.y)*t;p2.x = p.x - (l2.x - l1.x)*t;p2.y = p.y - (l2.y - l1.y)*t;
}
void c2c_inst_p(point c1,double r1,point c2,double r2,point &p1,point &p2)
{point u,v;double t;t = (1 + (r1*r1 - r2*r2)/disp2p(c1,c2)/disp2p(c1,c2))/2;u.x = c1.x + (c2.x - c1.x)*t;u.y = c1.y + (c2.y - c1.y)*t;v.x = u.x + c1.y - c2.y;v.y = u.y - c1.x + c2.x;l2c_inst_p(c1,r1,u,v,p1,p2);
}
bool c2c_tangent(point a,double r1,point b,double r2)
{if( dd(disp2p(a,b),r1+r2) || dd(disp2p(a,b),fabs(r1-r2)) )return true;return false;
}
point c2c_tangent_p(point a,double r1,point b,double r2)
{point t;if( dd(disp2p(a,b),r1 + r2)  ){t.x = (r1*b.x + r2*a.x)/(r1 + r2);t.y = (r1*b.y + r2*a.y)/(r1 + r2);return t;}t.x = (r1*b.x - r2*a.x)/(r1 - r2);t.y = (r1*b.y - r2*a.y)/(r1 - r2);return t;
}
int fugai[MAX];
double crossProduct(point a,point b,point c)//向量 ac 在 ab 的方向 顺时针是正 
{return (c.x - a.x)*(b.y - a.y) - (b.x - a.x)*(c.y - a.y);
}
double disp2l(point a,point l1,point l2)
{return fabs( crossProduct(a,l1,l2) )/disp2p(l1,l2);
}
bool onSegment(point a, point b, point c)
{if( dd(crossProduct(a,b,c),0.0) && dyd(c.x,min(a.x,b.x)) && xyd(c.x,max(a.x,b.x)) && dyd(c.y,min(a.y,b.y)) && xyd(c.y,max(a.y,b.y)) )return true;return false;
}bool xiangqie(point p, int n) {FOR(i, 0, n)if( !dd(disp2p(p, c[i]), d) )return false;return true;
}
//M在相交区域内 
bool Minall(point M, int n) {FOR(i, 0, n)if( dy(disp2p(M, c[i]), d) )return false;return true;
}
double solve(int n) {if( Minall(M, n) )return 0.0;int cnt = 0;double mmin = INF;//若最后求的点在圆弧上 FOR(i, 0, n) {if( xyd(disp2p(M, c[i]), d) )continue;point a, b;l2c_inst_p(c[i], d, M, c[i], a, b);double len = disp2p(c[i], M);if( dd(len, disp2p(a, M) + d) && Minall(a, n) && xy(len-d, mmin) )mmin = len-d;if( dd(len, disp2p(b, M) + d) && Minall(b, n) && xy(len-d, mmin) )mmin = len-d;}if( xy(mmin, INF) )return mmin;FOR(i, 0, n)FOR(k, i+1, n) {if( dy(disp2p(c[i], c[k]), 2*d) )return -1;if( dd(disp2p(c[i], c[k]), 2*d) ) {point p;p.x = (c[i].x + c[k].x)/2;p.y = (c[i].y + c[k].y)/2;if( xiangqie(p, n) )return disp2p(p, M);elsereturn -1;}if( c[i] == c[k] )continue;point a, b;c2c_inst_p(c[i], d, c[k], d, a, b);if( Minall(a, n) ) {double len = disp2p(M, a);if( xy(len, mmin) ) mmin = len;}if( Minall(b, n) ) {double len = disp2p(M, b);if( xy(len, mmin) )mmin = len;}}return mmin;
}
int main()
{int ncases, n, ind = 1;while( ~scanf("%lf%lf%lf", &M.x, &M.y, &d) ) {scanf("%d", &n);FOR(i, 0, n)c[i].get();double ans = solve(n);if( ans < 0 )printf("X\n");elseprintf("%.2lf\n", ans);}return 0;
}



http://www.ppmy.cn/news/297889.html

相关文章

Thinkpad T460P I7 6820HQ版本运算以及显卡能力简单测试

总是忍不住剁手&#xff0c;尤其是在自己感觉某个阶段自己浑身不舒服的时候。上个周末又剁手买了个I7 6820HQ版本的Thinkpad T460P。大致看了下配置&#xff0c;应该说是有着一个不错的处理器以及显卡&#xff0c;只是硬盘是机械盘&#xff0c;我自己又加了一块128G的固态扩展了…

死亡空间2显卡测试软件,求流畅 《死亡空间2》画质如何设置?

低端显卡也能玩爽&#xff1f; 上期我们对一些600~3000元中高端显卡在《死亡空间2》的性能表现有了一个比较详细的测试&#xff0c;表现均无压力&#xff0c;不过用高端卡玩游戏的玩家还是在少数&#xff0c;中低端显卡的占有率还是相当大的&#xff0c;至于什么样的卡能玩&…

ATI/NVIDIA显卡功耗表

ATI Multicard&#xff1a;&#xff08;多卡交火&#xff09;HD4870X2 CF_________ 149W-512WHD4870X2 HD4870 CF_ 150W-409W (HD4870 512MB)HD4870 CF____________ 128W-255WHD4870 HD4850 CF___96W-221WHD4850 CF____________ 78W-199WHD4670 CF___________ 44W-110WHD3870…

hdu 4760

题目 大意: 3种操作 E i n,对应n个区间,每个区间加一个标记i; D i ,抹去前面的标记i; F s t.如果点s和点t的标记有交集则输出"F",否则输出"D: 想法: 我悔过,比赛时,感觉题目太复杂,没管它,赛后来看了看,没想到暴力能水过. 先把数据全部读入,然后把点离散化,…

OV2640

OV2640 硬件连接 通过开发板的OLED/CAMERA接口与摄像头模块连接。具体引脚连接如上图所示 SCCB时序 外部控制器对OV2640寄存器的配置参数是通过SCCB总线传输过去的&#xff0c;而SCCB总线跟I2C十分类似&#xff0c;在STM32驱动中直接使用片上I2C外设与它通讯。 SCCB与标准的…

GEngine一个基于WebGPU的渲染引擎

一、废话篇&#xff1a; 2019年时候就有写一个渲染引擎想法&#xff0c;一直到现在才真正意义上算给实现了当初的想法&#xff0c;写了好几个月了和小伙伴这才有个初版&#xff08;虽然里面还有一堆bug哈&#xff0c;没时间改啊&#xff09;。说在前面GEngine借鉴了其他渲染引擎…

引领618首波爆发!实在RPA数字员工与海尔等品牌共赢全域增量

作为全面放开之后的首个现象级电商大促&#xff0c;今年618的重要性不言而喻。如何在“毛遂自荐”的大促秀场中&#xff0c;满足甚至超过消费者购物需求&#xff0c;成为每个品牌商家的必修课。 疫情的催化和直播间强互动属性&#xff0c;越来越多消费者倾向直播购物&#xff0…

grep命令的使用

grep命令是Linux中常用的文本搜索工具&#xff0c;它可以根据用户指定的模式&#xff0c;在文件或标准输入中查找匹配的文本行并返回。 下面是grep命令的一些常见选项&#xff1a; -i&#xff1a;忽略大小写-n&#xff1a;显示匹配行的行号-v&#xff1a;显示不匹配的行-r&am…