jzoj 3660. 【SHTSC2014】信号增幅仪

2024-01-30 05:38

本文主要是介绍jzoj 3660. 【SHTSC2014】信号增幅仪,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Description

无线网络基站在理想状况下有效信号覆盖范围是个圆形。而无线基站的功耗与圆的半径的平方成正比。现给出平面上若干网络用户的位置,请你选择一个合适的位置建设无线基站 ……
就在你拿起键盘准备开始敲代码的时候,你的好朋友发明家SHTSC突然出现了。SHTSC刚刚完成了他的新发明——无线信号增幅仪。增幅仪能够在不增加无线基站功耗的前提下,使得有效信号的覆盖范围在某一特定方向上伸长若干倍。即:使用了增幅仪的无线基站覆盖范围是个椭圆,其功耗正比于半短轴长的平方。
现给出平面上若干网络用户的位置,请你选择一个合适的位置建设无线基站,并在增幅仪的帮助下使所有的用户都能接收到信号,且无线基站的功耗最小。
注意:由于SHTSC增幅仪的工作原理依赖地磁场,增幅的方向是恒定的。

Input

第一行一个整数:n。平面内的用户个数。
之后的n行每行两个整数x, y,表示一个用户的位置。
第n+2行一个整数:a。表示增幅仪的增幅方向,单位是度。表示增幅仪的方向是从x正方向逆时针转a度。
第n+3行一个整数:p。表示增幅仪的放大倍数。

Output

输出一行一个实数,为能够覆盖所有用户的最小椭圆的半短轴长,四舍五入到三位小数。

Sample Input

输入1:
2
1 0
-1 0
0
2
输入2:
3
1 1
-1 -1
0 0
45
7

Sample Output

输出1:
0.500
输出2:
0.202

Data Constraint

对于10%的数据,保证最优方案的中心在原点。
对于20%的数据,保证点是随机生成的。
对于30%的数据,n≤100。
对于50%的数据,n≤5000。
对于100%的数据,n≤50000,0≤a<180,1≤p≤100,|x|,|y|≤2×10^8。


Sulotion

因为只有固定的方向才能增幅,而结果为椭圆,于是我们可以把它缩放为增幅前的圆,
所以先旋转a度(用三角函数要转弧度),然后每个点横坐标除以p,最后最小圆覆盖。
最小圆覆盖的方法:随机增量法 http://blog.csdn.net/commonc/article/details/52291822(非常详细且证明了时间复杂度期望为O(n))
及已知三点求外接圆的方法 http://blog.csdn.net/liyuanbhu/article/details/52891868

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;#define N 50050
#define DB double
#define pi 3.1415926535897932384626433832795struct note
{DB x,y;
};note a[N];
DB al,th,p,co,si,ans,s;
int n; DB sqr(DB x){return x*x;}
DB dis(note x,note y){return sqrt(sqr(x.x-y.x)+sqr(x.y-y.y));}
bool pd(int x) {return dis(a[0],a[x])<=s;} void init()
{scanf("%d",&n);int x,y;for (int i=1;i<=n;i++){scanf("%d%d",&x,&y);a[i].x=DB(x); a[i].y=DB(y);}scanf("%d%d",&x,&y);al=DB(x); p=DB(y);th=al*pi/180.00000;si=sin(th); co=cos(th);DB xx,yy;for (int i=1;i<=n;i++){xx=a[i].x; yy=a[i].y;a[i].x=si*yy+co*xx;a[i].y=co*yy-si*xx;a[i].x/=p;}
}note solve(note x,note y,note z)
{DB a,b,c,d,e,f;a=x.x-y.x; b=x.y-y.y; c=x.x-z.x; d=x.y-z.y;e=sqr(x.x)-sqr(y.x)+sqr(x.y)-sqr(y.y);  e/=2;f=sqr(x.x)-sqr(z.x)+sqr(x.y)-sqr(z.y);  f/=2;note re;re.x=-(d*e-b*f)/(b*c-a*d);re.y=-(a*f-c*e)/(b*c-a*d);return re;
}void find()
{random_shuffle(a+1,a+n+1);for (int i=1;i<=n;i++)if (pd(i)==false){a[0]=a[i]; s=0.0;for (int j=1;j<=i-1;j++)if (pd(j)==false){a[0].x=(a[i].x+a[j].x)/2; a[0].y=(a[i].y+a[j].y)/2;s=dis(a[i],a[j])/2;for (int k=1;k<=j-1;k++)if (pd(k)==false){a[0]=solve(a[i],a[j],a[k]);s=dis(a[0],a[i]);}}}
}int main()
{freopen("amplifier.in","r",stdin);freopen("amplifier.out","w",stdout);init();find();ans=s;printf("%.3lf\n",ans);return 0;
}

这篇关于jzoj 3660. 【SHTSC2014】信号增幅仪的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/659247

相关文章

列举你能想到的UNIX信号,并说明信号用途

信号是一种软中断,是一种处理异步事件的方法。一般来说,操作系统都支持许多信号。尤其是UNIX,比较重要应用程序一般都会处理信号。 UNIX定义了许多信号,比如SIGINT表示中断字符信号,也就是Ctrl+C的信号,SIGBUS表示硬件故障的信号;SIGCHLD表示子进程状态改变信号;SIGKILL表示终止程序运行的信号,等等。信号量编程是UNIX下非常重要的一种技术。 Unix信号量也可以

Linux中如何屏蔽信号

本篇文章主要学习Linux的信号处理机制,着重学习屏蔽信号部分。屏蔽信号处理的两种方式类似于信号的捕获,一种方式是直接对其设置,另一种方式是先获得描述符的掩码,然后对其设置操作。 本文主要参考自《嵌入式linux系统使用开发》,作者何永琪,Thanks. 在linux系统中,如何处理某个进程发送的一个特定信号呢?一般来说有三种方式: 1) 忽略信号 2) 屏蔽信号 3) 为该信号添

信号与信号量的区别[转]

信号量(Semaphore),有时被称为信号灯,是在多环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个信号量;一旦该关键代码段完成了,那么该线程必须释放信号量。其它想进入该关键代码段的线程必须等待直到第一个线程释放信号量。为了完成这个过程,需要创建一个信号量VI,然后将Acquire Semaphore VI以及Release Se

国产隔离放大器:增强信号完整性和系统安全性的指南

隔离放大器是电子领域的关键组件,特别是在信号完整性和电气隔离至关重要的应用中。这些放大器隔离输入和输出信号,使它们能够在没有直接电气连接的情况下跨不同系统传输数据。这确保了电路一部分的高压尖峰或噪声不会影响另一部分,从而保护了系统和用户。随着国产隔离放大器的不断发展,它们提供了性能、可靠性和成本效益的完美结合,使其成为工程师和系统设计师的理想选择。 1. 了解国产隔离放大器的优势 增强信号

信号有效带宽

根据傅里叶变换可以知道信号带宽是无穷大的,这对实际应用是帮助不大的,所以有了有效带宽的概念,可能大家知道常用的经验公式:O.35/Tr或者0.5/Tr等,那这个公式是怎么来的呢?有效带宽又是什么含义呢? 首先来看一个RC低通滤波器,如下: 其上升时间Tr为: 该滤波器的传递函数为: H(s)=1/(RCS+1) 式中S=2πf,转换为频率f的函数为: H(f)=1/(R

Linux 一个简单的中断信号实现

1.查看手册,学习中断处理图 流程:(次级源->开关)到 源挂起 到 开关  到 处理优先级 到 中断挂起标志 到 CPSR里面的开关(图中未展现) 最后cpu处理 此次我们先使用k1按键实现中断,即是eint8 2.此次仅涉及一个中断挂起,步骤较简单,有的寄存器未涉及处理。 寄存器挂起后,通过写1清除对应位( 硬件设计逻辑: 中断标志位通常由硬件自动设置为 1,表示中断发生。

【QT】十分钟全面理解 信号与槽的机制

目录 从一个定时器开始全方位简介1. 基本的信号与槽连接语法例子 2. 使用函数指针连接信号与槽(现代 C++ 风格)语法例子 3. 使用 Lambda 表达式作为槽语法例子 4. 自动连接(`QMetaObject::connectSlotsByName`)规则例子 5. 信号与槽的多对多连接例子(一个信号连接多个槽)例子(多个信号连接一个槽) 6. 断开信号与槽的连接语法例子 7. 信号

RS485差分信号不对称

在RS485总线通信中,差分信号不对称的问题时常出现,尤其是在总线未接从机设备的情况下。这一问题不仅影响通信质量,还可能导致信号传输错误。通过对实际波形、芯片手册及电路的深入分析,可以找出引发差分信号不对称的根本原因,并采取相应的解决措施。 问题描述 在RS485通信测试中,当总线上没有从机设备连接时,观察到RS485差分信号(A、B)关于地(GND)不对称。理想情况下,RS485的差分信

学习记录-Qt信号和槽使用遇到的问题记录

信号和槽的连接方式 1.自动连接 2.队列连接 3.直接连接 软件运行时,在串口线程和主界面线程之间传递参数,在自己的电脑不会丢失,打包到其他电脑运行,数据随机变化。通过log文件分析,在主界面中执行参数传递的函数,在串口线程还没有处理参数就结束了生命周期,导致参数随机变化。 在多线程间通过信号和槽传递参数时一定要注意参数变量的生命周期。

RF射频信号布局布线要点

RF射频信号布局布线要点 一、射频产品布局要求: 1、布局采用一字型布局。在同一个屏蔽腔体内,布局时应该按RF主信号流一字布局由于空间限制,如果在同一个屏蔽腔内,RF主信号的元器件不能采用一字布局时,可以采用L形布局,不要用U字形布局。 2、相同单元的布局要尽量保证完全相同。有多个接收通道和发射通道,就要保证多个通道的布局和布线要完全相同。 3、布局时就要考虑RF主信号走向,和器件