test20190308
测试
- 晚上考试,是 \(SCOI\ 2016\ Day\ 2\) 的题目.
妖怪
- 由于之前在洛谷上用三分水过去了,就很 \(naive\) 地打了一个三分就跑了.获得 \(10\) 分好成绩.
- 记 \(x=atk,y=dnf,k=\frac b a\) ,推下式子,有 \(strength(a,b)=x+y+x*k+y*\frac 1 k\).
- 注意到有一个我忘了的结论和这个形式很相似:过定点 \((x,y)\) ,斜率为 \(k\) 的直线在 \(x,y\) 轴上的截距之和为 \(x+y-x*k-y*\frac 1 k\).
- 于是改一下定义,记 \(k=-\frac b a<0\) ,则 \(strength(a,b)\) 即为截距之和.那么对于一个确定的斜率 \(k\) ,使得截距之和最大的那个点一定在凸包上.
- 于是先求一个凸包,再对凸包上每个点求一次可取的最小值即得答案.
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
inline int read()
{
int out=0,fh=1;
char jp=getchar();
while ((jp>'9'||jp<'0')&&jp!='-')
jp=getchar();
if (jp=='-')
fh=-1,jp=getchar();
while (jp>='0'&&jp<='9')
out=out*10+jp-'0',jp=getchar();
return out*fh;
}
const int MAXN=1e6+10;
int n;
int atk[MAXN],dnf[MAXN];
const double eps=1e-8;
struct v2{
double x,y;
v2(double x=0,double y=0):x(x),y(y){}
v2 operator + (const v2 &rhs) const
{
return v2(x+rhs.x,y+rhs.y);
}
v2 operator - (const v2 &rhs) const
{
return v2(x-rhs.x,y-rhs.y);
}
inline double operator * (const v2 &rhs) const
{
return x*rhs.y-y*rhs.x;
}
double angle()
{
return atan2(y,x);
}
bool operator < (const v2 &rhs) const
{
return x==rhs.x?y<rhs.y:x<rhs.x;
}
v2 operator ^ (const double &lambda) const
{
return v2(x*lambda,y*lambda);
}
double slop()
{
return y/x;
}
};
double calc(double k,v2 p)
{
return p.x+p.y-k*p.x-p.y/k;
}
v2 p[MAXN],stk[MAXN],origin;
int tp=0;
int cmp(v2 a,v2 b)
{
double a1=(a-origin).angle();
double a2=(b-origin).angle();
return a1==a2?a.x<b.x:a1<a2;
}
void ConvexHull()
{
sort(p+1,p+1+n);
for(int i=n;i>=1;--i)
{
while(tp>=2 && (stk[tp]-stk[tp-1])*(p[i]-stk[tp])<=0)
--tp;
stk[++tp]=p[i];
}
}
int main()
{
// freopen("monster.in","r",stdin);
// freopen("monster.out","w",stdout);
n=read();
for(int i=1; i<=n; ++i)
{
atk[i]=read(),dnf[i]=read();
p[i]=v2(dnf[i],atk[i]);
}
ConvexHull();
double ans=2e9;
for(int i=1;i<=tp;++i)
{
double k1=(i==tp?0:(stk[i]-stk[i+1]).slop());
double k2=(i==1?-2e9:(stk[i]-stk[i-1]).slop());
double k=-sqrt(1.0*stk[i].y/stk[i].x);
if(k1>=k && k>=k2)
ans=min(ans,calc(k,stk[i]));
if(i!=tp && stk[i].y>stk[i+1].y)
break;
if(i!=tp)
ans=min(ans,calc(k1,stk[i]));
}
printf("%.4lf\n",ans);
return 0;
}
美味
- 这题之前写过虽然写得很丑,用主席树搞一搞即可,应该是相对最简单的.
围棋
- 考场上妄图用一些奇奇怪怪的 \(kmp\ +\)容斥乱搞,无果,寻病终,获得 \(10\) 分好成绩.
test20190308的更多相关文章
随机推荐
- jmeter-负载
主: remote_hosts=10.0.70.35:1099,10.0.70.47:1099 server.rmi.localport=1099 从: remote_hosts=10.0.70.3 ...
- MySQL 乐观锁 悲观锁 共享锁 排他锁
乐观锁 乐观锁是逻辑概念上的锁,不是数据库自带的,需要我们自己去实现.乐观锁是指操作数据库时(更新操作),想法很乐观,认为这次的操作不会导致冲突,在操作数据时,并不进行任何其他的特殊处理(也就是不加锁 ...
- PHP会话控制之如何正确设置session_name
定义: string session_name([string $name]) 说明: 在php.ini中配置为:session.name = PHPSESSID 在请求开始的时候,会话名称会被重置并 ...
- Win10配Theano环境和Keras框架
网络上有各种各样的win7 64bit安装theano的方法,我也试过好多,各种各样的问题.因为之前没了解过MinGw等东西,所以安装起来比较费劲,经过不断的尝试,最终我按照以下过程安装成功. 其实过 ...
- JS正则表达式入门,看这篇就够了
前言 在正文开始前,先说说正则表达式是什么,为什么要用正则表达式?正则表达式在我个人看来就是一个浏览器可以识别的规则,有了这个规则,浏览器就可以帮我们判断某些字符是否符合我们的要求.但是,我们为什么要 ...
- Mysql5.7基于日志转为基于事务主从复制
将基于日志的复制变更为基于事务的复制 mysql版本要高于5.7.6 gtid_mode要设为off 处理步骤 详细步骤 1.查看主从mysql版本是否高于5.7.6 show variables l ...
- 为Pdf批量添加水印
Itext官网下载jar包 /** * PDF工具类 */ public class PdfUtil { public static void main(String[] args) throws E ...
- 解决无法启动mysql服务错误1069
之前在服务器上修改了my.ini文件 mysql就一直无法启动 后来把my.ini改回原来的,还是无法启动并报1069错误 在网上查了一下,基本上都是说修改mysql密码,再重新启动,试了一下没作用, ...
- 重新学习MySQL数据库8:MySQL的事务隔离级别实战
重新学习Mysql数据库8:MySQL的事务隔离级别实战 在Mysql中,事务主要有四种隔离级别,今天我们主要是通过示例来比较下,四种隔离级别实际在应用中,会出现什么样的对应现象. Read unco ...
- EasyUI validType属性
/** * 包含easyui的扩展和常用的方法 * * @author * * @version 20120806 */ var wjc = $.extend({}, wjc);/* 定义全局对象,类 ...