Codeforces 527C Glass Carving
vjudge 上题目链接:Glass Carving
题目大意: 一块 w * h 的玻璃,对其进行 n 次切割,每次切割都是垂直或者水平的,输出每次切割后最大单块玻璃的面积:
用两个 set 存储每次切割的位置,就可以比较方便的把每次切割产生和消失的长宽存下来(用个 hash 映射数组记录下对应值的长宽的数量即可,O(1) 时间维护),每次切割后剩下的最大长宽的积就是答案了:
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<set> 5 using namespace std; 6 typedef long long LL; 7 const int N = 200005; 8 9 int w[N], h[N]; // 记录存在的边长的数量 10 set<int> sw, sh; // 记录下所有切点的位置 11 set<int>::iterator i,j; 12 13 void insert(set<int> &s, int *b, int p) { 14 s.insert(p); 15 i = j = s.find(p); 16 ++j; --i; 17 --b[*j - *i]; // 除掉被分开的长宽 18 ++b[p - *i]; // 新产生了两个长宽 19 ++b[*j - p]; 20 } 21 22 int main() { 23 int ww,hh,n,p; 24 while(~scanf("%d %d %d",&ww,&hh,&n)) { 25 sw.clear(); sh.clear(); 26 sw.insert(0); sw.insert(ww); 27 sh.insert(0); sh.insert(hh); 28 29 memset(w, 0, sizeof w); w[ww]++; 30 memset(h, 0, sizeof h); h[hh]++; 31 int y = ww, x = hh; 32 33 while(n--) { 34 getchar(); 35 if(getchar() == 'H') { 36 scanf("%d",&p); 37 insert(sh, h, p); 38 } 39 else { 40 scanf("%d",&p); 41 insert(sw, w, p); 42 } 43 while(!w[y]) --y; // 因为每次切割后最大值总是单调递减的,所以这样维护即可,如果从头到尾扫一遍的话会超时的
44 while(!h[x]) --x; 45 printf("%I64d\n", (LL)x * y); 46 } 47 } 48 return 0; 49 }
参考了别人的思路才会做的,果然好强大,自己也好弱 Orz 。。。
转载于:https://www.cnblogs.com/Newdawn/p/4818537.html
Codeforces 527C Glass Carving相关推荐
- Codeforces 527C Glass Carving (最长连续0变形+线段树)
Leonid wants to become a glass carver (the person who creates beautiful artworks by cutting the glas ...
- Codeforces 528A Glass Carving STL模拟
题目链接:点击打开链接 题意: 给定n*m的矩阵.k个操作 2种操作: 1.H x 横向在x位置切一刀 2.V y 竖直在y位置切一刀 每次操作后输出最大的矩阵面积 思路: 由于行列是不相干的,所以仅 ...
- Codeforces Round #296 (Div. 2) C. Glass Carving [ set+multiset ]
传送门 C. Glass Carving time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- 【CodeForces - 527C】Glass Carving(线段树或者SBT或者set)
题干: Leonid wants to become a glass carver (the person who creates beautiful artworks by cutting the ...
- CodeForces - 1459D Glass Half Spilled(dp)
题目链接:点击查看 题目大意:给出 n 个水杯,每个水杯最大容量为 aia_iai,每个水杯初始时有 bib_ibi 的水,两个水杯之间可以互相倒水,不过每次会损失一半水量,更具体的说,假设第 i ...
- 线段树详解 (原理,实现与应用)
线段树详解 By 岩之痕 目录: 一:综述 二:原理 三:递归实现 四:非递归原理 五:非递归实现 六:线段树解题模型 七:扫描线 八:可持久化 (主席树) 九:练习题 一:综述 假设有编号从1到n的 ...
- 【转载】线段树题目2
1.hdu1166 敌兵布阵 更新节点,区间求和. 2.hdu1754 I Hate It 更新节点,区间最值. . 3.hdu1698 Just a Hook 成段更新,总区间求和. . 4.hdu ...
- Linux java集成安装环境,Linux下Java环境安装
本节主要讲解Linux(Centos 6.5)下Java环境的安装 1. 卸载机器上默认安装的JDK 在Linux环境下一般会默认安装jdk,为了自己项目的开发部署,一般情况要重新装jdk,而且自己装 ...
- OI每周刷题记录——lrllrl
看这标题就知道我是模仿的hzwer大佬,远程%%% 大佬的OI经历让蒟蒻我深受感触,为了晚一些AFO本蒟蒻也得加油了 从高二上期第一周开始计数,每个星期天更一次,一直更到我AFO 如果这是我此生最后一 ...
最新文章
- 【组队学习】【35期】数据可视化(Matplotlib)
- 铜川市计算机学校排名,铜川市计算机专业学校
- Spring in Action 4th 学习笔记 之 AOP
- 【Groovy】集合遍历 ( “ *. “ 展开操作符 | 代码示例 )
- 手把手教你在Linux上搭建BitTorrent服务器
- 电脑服务器不稳定怎么办,网速不稳定怎么办? 网速不稳定的原因与解决办法-电脑教程...
- Geth的命令行介绍
- qt tableWidget 表格控件使用
- 优化--减少HTTP请求
- 【Python CheckiO 题解】Even the Last
- 想成为有钱人,你要逼自己戒掉这5个坏习惯
- hbase 导入到es_HBase数据同步到ElasticSearch的方案
- python中的列表推导与生成器
- java编程练习题三
- 架构设计 - 架构师必读书单
- 达朴汇联CEO张焱:从隐私计算出发,共建Web3.0
- Java 汉字获取拼音或首字母工具类
- html外链自动加nofollow,WordPress自动为站外链接添加nofollow标签
- 伦敦国王学院计算机申请要求,2020年伦敦国王学院高级计算机专业研究生申请条件及世界排名|学费介绍...
- python 两个等长list的各对应位置元素相加+两个字典相加,相同键元素累加,不同键元素取全集