COGS-2049 疯狂动物城
Description
你意外来到了一个未知的星球, 这里是一个动物乌托邦, 生活着一群拥有非凡智力的动物.
你遇到了一个叫做尼克的狐狸, 他准备给他的 GF 过生日 。
他将制作一个巨大的多层蛋糕, 他已经有了一些圆柱形的单层蛋糕, 可以把这些蛋糕拼
装起来。 遗憾的是, 由于一些限制, 这些单层蛋糕并不能被全部利用, 你只能选出一部分来
制作多层蛋糕:
- 1.物理学要求: 为了稳定和美观, 半径大的蛋糕必须在放在半径小的蛋糕下面。
- 2.Mr.Big 的钦定要求: 编号小的蛋糕必须放在编号大的蛋糕下面。
作为交换, 他将向你介绍黑社会老大 Mr.Big, Mr.Big 会告诉你一些黑科技, 这也许是
击败人工智能的关键。
你需要帮他制定一个使多层蛋糕总体积最大的方案, 并计算出最大蛋糕的总体积。
注意: 两个半径相同的蛋糕不能放在一起。
Input
第一行一个整数 n,
接下来 n 行,第 i+1 行两个整数 R,H 分别表示编号为 i 的蛋糕的半径和高度。
Output
只有一行一个整数, 为最大总体积, 你需要精确到整数位。
Sample Input
5
10 7
12 1
1 4
9 7
1 1
Sample Output
3983.54
二维偏序稞题,首先按读入顺序更新线段树,以蛋糕半径为下标,以当前此半径为低的最优体积为线段树的值。最终答案为线段树中的最大值。
看到一份优秀的代码,写得比某蒟蒻好得多,发出来供大家参考。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <stack>
#include <map>
#include <vector>
#include <queue>
#define ls (x << 1)
#define rs (x << 1 | 1)
#define mid ((l + r) >> 1)
#define L 100010
#define LL long long
const double pi = 3.14159265358979323846;
using namespace std; inline int gi() {
char cj = getchar();
int ans = , f = ;
while (cj < '' || cj > '') {
if (cj == '-') f = -;cj = getchar();
}
while (cj >= '' && cj <= '') ans = ans * + cj - '', cj = getchar();
return f * ans;
} int n, R, r[L], h[L];
LL v[L], tr[L << ], ans; inline LL query(int x, int l, int r, int a, int b) {
if (a <= l && b >= r) return tr[x];
if (b < l || a > r) return ;
if (b <= mid) return query(ls, l, mid, a, b);
else if (a > mid) return query(rs, mid + , r, a, b);
else return max(query(ls, l, mid, a, mid), query(rs, mid + , r, mid + , b));
} inline void update(int x, int l, int r, int a, LL w) {
if (l == r) {tr[x] = max(w, tr[x]); return ;}
if (a <= mid) update(ls, l, mid, a, w);
else if (a > mid) update(rs, mid + , r, a, w);
tr[x] = max(tr[ls], tr[rs]);
} int main() {
//freopen ("zootopia.in","r",stdin);
//freopen ("zootopia.out","w",stdout);
n = gi();
for (int i = ; i <= n; ++i) r[i] = gi(), h[i] = gi(), R = max(R, r[i]);
R++;
for (int i = ; i <= n; ++i) {
LL maxx = query(, , R, r[i] + , R);
v[r[i]] = max(v[r[i]], maxx + h[i] * r[i] * r[i]);
update(, , R, r[i], v[r[i]]);
}
ans = query(, , R, , R);
printf("%.2lf\n", ans * pi);
return ; }
COGS-2049 疯狂动物城的更多相关文章
- 《疯狂动物城》主题曲《TryEverything》中文翻译
<疯狂动物城>主题曲<TryEverything>夏奇拉激情献唱,很多事情是需要是试试,不试试就不知道可以成功. Oh oh oh oh oooh 哦哦哦哦哦 Oh oh oh ...
- [GDOI2016][树链剖分+主席树]疯狂动物城
题面 Description Nick 是只在动物城以坑蒙拐骗为生的狐狸,儿时受到偏见的伤害,放弃了自己的理想.他被兔子 Judy 设下圈套,被迫与她合作查案,而卷入意想不到的阴谋,历尽艰险后成为搭档 ...
- 【xsy2440】【GDOI2016】疯狂动物城
感受一下这恐怖的题目长度~~~ 其实题意很裸,但是作为GDOI的一道防AK题,自然有他优秀的地方. 简化题意:给出一棵树,要求支持三个操作: 1.修改点值 2.询问点$x$到$y$之间的一些东东 3. ...
- 【GDOI 2016 Day1】疯狂动物城
题目 分析 注意注意:码农题一道,打之前做好心理准备. 对于操作1.2,修改或查询x到y的路径,显然树链剖分. 对于操作2,我们将x到y的路径分为x到lca(x,y)和lca(x,y)到y两部分. 对 ...
- 【IOS】将一组包含中文的数据按照#ABC...Z✿分组
上一篇文章[IOS]模仿windowsphone列表索引控件YFMetroListBox里面 我们一步步的实现了WindowsPhone风格的索引. 但是有没有发现,如果你要实现按照字母排序,你还得自 ...
- 可变数组NSMutableArray
//创建一个空的可变数组 NSMutableArray *array = [NSMutableArray array]; //向数组里面添加对象 [array addObject:@"< ...
- spring笔记--依赖注入之针对不同类型变量的几种注入方式
控制反转和依赖注入讲的都是一个概念,只不过是站在了不同的角度,所谓的依赖注入: 是指在运行期,由外部容器动态地将依赖对象注入到组件中.当spring容器启动后,spring容器初始化,创建并管理bea ...
- 5.6 TestNg的使用
Java语言编写的WebDriver测试程序通常使用单元测试框架运行.TestNG单元测试框架比JUnit单元测试框架更强大,它提供了更多的扩展功能.目前很大一部分自动化测试工程师已经开始 ...
- 第三百四十四天 how can I 坚持
三言诗,把自己的心情,想要说的话用三句话诗意的表达出来.像: 烦===>好想睡一觉,待日落,盼天明. 愁====>待到花开花落,闲庭信步,蹋碎一世忧愁. 三句话,可以表达的很好. 老是感觉 ...
随机推荐
- 批处理BAT替换与截取字符串的用法t1=%a:~3%是什么意思
在bat编写中,我们经常越到t1=%a:~3%之类的代码,这里简单介绍下用法,需要的朋友可以参考下: 一.替换用法 例 @echo off set a=belcome to CMD borld! ...
- msp430入门学习40
msp430的其他八 msp430入门学习
- Laravel 数据库操作之Eloquent ORM模型
//模型中的相关代码 namespace App; use Illuminate\Database\Eloquent\Model; class Student extends Model{ //默认对 ...
- 2-sat问题,输出方案,几种方法(赵爽的论文染色解法+其完全改进版)浅析 / POJ3683
本文原创于 2014-02-12 09:26. 今复习之用,有新体会,故重新编辑. 2014-02-12 09:26: 2-sat之第二斩!昨天看了半天论文(赵爽的和俉昱的),终于看明白了!好激动有 ...
- Windows下,RabbitMQ安装、卸载以及遇到的坑
RabbitMQ是目前比较使用比较广泛的一个队列服务器,但是很多朋友在使用过程中,也遇到一些问题,这篇文章主要是做一个总结吧 本篇文章,虽然标题命名为“安装与卸载”,但是网上有很多类似的文章,我就简单 ...
- 一起来学Spring Cloud | 第五章:熔断器 ( Hystrix)
在微服务项目中,一个系统可以分割成很多个不同的服务模块,不同模块之间我们通常需要进行相互调用.springcloud中可以使用RestTemplate+Ribbon和Feign来调用(工作中基本都是使 ...
- log4j配置(转载)
Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存放器和布局的,它可接key=value格式的设置或xml格式的设置信息.通过配置,可以创建出Log4J的运行环境 ...
- jquery+css实现邮箱自动补全
今天在公司做一个电子商务网站的注册会员时,要求用户在电子邮箱文本框中输入时,给与热点提示常用的电子邮箱,帮助用户选择,提高体验效果.下面是用Jquery+css实现的邮箱自动补全,供大家参考和学习. ...
- 五步掌握Git的基本开发使用命令
第一步:设置全局变量: git config --global user.name "gang.li" git config --global user.email "l ...
- [Testing] Config jest to test Javascript Application -- Part 1
Transpile Modules with Babel in Jest Tests Jest automatically loads and applies our babel configurat ...