博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
雾雨魔理沙 (Standard IO)
阅读量:4879 次
发布时间:2019-06-11

本文共 1182 字,大约阅读时间需要 3 分钟。

Description

  在幻想乡,雾雨魔理沙是住在魔法之森普通的黑魔法少女。话说最近魔理沙从香霖堂拿到了升级过后的的迷你八卦炉,她迫不及待地希望试试八卦炉的威力。在一个二维平面上有许多毛玉(一种飞行生物,可以视为点),每个毛玉具有两个属性,分值value和倍率mul。八卦炉发射出的魔法炮是一条无限长的直线形区域,可以视为两条倾斜角为α的平行线之间的区域,平行线之间的距离可以为任意值,如下图所示:

  这里写图片描述
  蓝色部分上下两条长边之间就是这次八卦炉的攻击范围,在蓝色范围内的毛玉(红点)属于该此被击中的毛玉,如果一个毛玉刚好在边界上也视为被击中。毛玉击中以后就会消失,每次发射八卦炉得到分值是该次击中毛玉的分值和乘上这些毛玉平均的倍率,设该次击中的毛玉集合为S,则分值计算公式为:
  Score = SUM{value[i] | i 属于 S} * SUM{mul[i] | i 属于 S} / |S|
  其中|S|表示S的元素个数。魔理沙将会使用若干次八卦炉,直到把所有毛玉全部击中。任意两次攻击的范围均不重叠。最后得到的分值为每次攻击分值之和。现在请你计算出能够得到的最大分值。

Input

  第1行:1个整数N,表示毛玉个数

  第2..N+1行:每行四个整数x, y, value, mul,表示星星的坐标(x,y),以及value和mul
  第N+2行:1个整数α,表示倾斜角角度,0°到180°

Output

  第1行:1个实数,表示最大分值,保留三位小数

题解

先求出那直线的一次函数,怎么求?经过证明,tan(a)就是y=kx+b的k。然后自己DP找最大值咯。

代码

uses math;var  n:longint;  x,y,va,mul,sv,sm:array [0..2001] of longint;  b,f:array [0..2001] of real;  m:real;procedure qsort(l,r:longint);var   i,j,t:longint;   tt,m:real;begin  i:=l; j:=r;  m:=b[(l+r) div 2];  repeat    while b[i]>m do inc(i);    while b[j]
j; if l
b[j] then //可能有精度问题。 f[i]:=max(f[i],f[j]+(sv[i]-sv[j])*((sm[i]-sm[j])/(i-j))); write(f[n]:0:3);end;begin init; main;end.

转载于:https://www.cnblogs.com/zyx-crying/p/9319607.html

你可能感兴趣的文章
java之静态代理与动态代理
查看>>
软件测试2019:第四次作业
查看>>
201571030335 + 小学四则运算练习软件项目报告
查看>>
不用代码就能实现get与post
查看>>
gdb基本调试命令
查看>>
互联网开放平台API安全设计
查看>>
复利计算--web版--总结--软件工程
查看>>
OPMN
查看>>
hdu 1999 不可摸数
查看>>
幂的求和取模
查看>>
LOG收集系统(一):原日志至收集
查看>>
【文摘】经营十二条
查看>>
清除浮动的方法
查看>>
Logstash连接Elasticsearch异常
查看>>
洛谷P4287 [SHOI2011]双倍回文(回文自动机)
查看>>
用户交互程序,格式化输出
查看>>
GNOME的发展与对比
查看>>
SPOJ PT07X Vertex Cover
查看>>
$ python-json模块的基本用法
查看>>
5.6.3.4 trim()方法
查看>>