测试

  • 晚上考试,是 \(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的更多相关文章

随机推荐

  1. 【乱码】Request QueryString 编码,传值乱码的几种情况和解决办法(单页,多页)

    自己的项目还好,合作接口神马的传值乱码是很常见的. 遇到了几次这种恶心情况,积累了一点经验,有不对的地方欢迎指正. 乱码原因: 一般来说,常用的编码不是utf-8就是gb2312,一样的 HttpUt ...

  2. python中的参数传递和返回值

    python中的参数传递类似java,有着自己的内存回收机制,这和C++有着很大的差别. 1.函数的参数传递: >>> a = [, , ] >>> def fun ...

  3. Asp.net mvc word预览与打印

    解决方案: 1. 在后台把word文件转化成pdf,在前台用iframe显示pdf,打印iframe,即可. 优点:用户体验好. 缺点:不支持IE. 实现 : 引用netoffice组件 主要代码: ...

  4. 《Django By Example》

    <Django By Example>第六章 中文 翻译 (个人学习,渣翻) 书籍出处:https://www.packtpub.com/web-development/django-ex ...

  5. mac下cordova的ios-deploy安装问题

    mac下进行cordova项目编译部署到ios设备,这个时候需要安装ios-deploy,会失败: npm WARN lifecycle ios-deploy@1.8.6~preinstall: ca ...

  6. Poi中getPhysicalNumberOfCells 与 getLastCellNum的差异

    getPhysicalNumberOfCells 与 getLastCellNum的区别 用org.apache.poi的包做excel导入,无意间发明若是excel文件中有空列,空列后面的数据全部读 ...

  7. ctci4.1

     ;      )         ;     )         return false;     else         return true; }

  8. 12.详解Condition的await和signal等待通知机制

    1.Condition简介 任何一个java对象都天然继承于Object类,在线程间实现通信的往往会应用到Object的几个方法,比如wait(),wait(long timeout),wait(lo ...

  9. poj-3461-kmp模板题。。。

    Oulipo Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 46290   Accepted: 18452 Descript ...

  10. 使用 C++ 多态时需要注意的问题

    本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/ 最近工作中遇到一些关于使用多态的细节问题,在此记录一下. 一.多态和模板匹配 模板是 C+ ...