ZOJ_3511

一种可行的思路就是如果我们把切蛋糕的方案排个序,每次切下来一块就算一下这块的边长,而且这一块必须不会再被切到。

为了实现上面的思路,我们不妨把每次切的方案记作(x,y),且x<y,那么很显然有一种排序方式是一定符合要求的,即按y-x的值由小到大排序。

接下来的问题就是怎么算边长了。实际上可以发现边长的数量是等于点的数量,于是我们不妨用线段树记录一下x、y之间点的数量,每切一刀就相当于把x+1、y-1之间所有的点删掉了,这样我们只要查询x、y之间点的数量,就可以将其作为我们当前切下来的这块蛋糕边的数量。最后蛋糕还剩一块没有统计,再看一下最后还剩多少个点就行了。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXD 100010
struct Cut
{int x, y;
}cut[MAXD];
int N, M, num[4 * MAXD];
int cmp(const void *_p, const void *_q)
{Cut *p = (Cut *)_p, *q = (Cut *)_q;return p->y - p->x < q->y - q->x ? -1 : 1;
}
void update(int cur)
{num[cur] = num[cur << 1] + num[(cur << 1) | 1];
}
void build(int cur, int x, int y)
{int mid = (x + y) >> 1, ls = cur << 1, rs = (cur << 1) | 1;num[cur] = y - x + 1;if(x == y)return ;build(ls, x, mid);build(rs, mid + 1, y);
}
void init()
{int i, x, y;for(i = 1; i <= M; i ++){scanf("%d%d", &x, &y);if(x < y)cut[i].x = x, cut[i].y = y;elsecut[i].x = y, cut[i].y = x;}qsort(cut + 1, M, sizeof(cut[0]), cmp);build(1, 1, N);
}
int query(int cur, int x, int y, int s, int t)
{int mid = (x + y) >> 1, ls = cur << 1, rs = (cur << 1) | 1;if(x >= s && y <= t)return num[cur];if(mid >= t)return query(ls, x, mid, s, t);else if(mid + 1 <= s)return query(rs, mid + 1, y, s, t);elsereturn query(ls, x, mid, s, t) + query(rs, mid + 1, y, s, t);
}
void refresh(int cur, int x, int y, int s, int t)
{int mid = (x + y) >> 1, ls = cur << 1, rs = (cur << 1) | 1;if(x >= s && y <= t){num[cur] = 0;return ;}if(mid >= s)refresh(ls, x, mid, s, t);if(mid + 1 <= t)refresh(rs, mid + 1, y, s, t);update(cur);
}
void solve()
{int i, j, k, ans = 0;for(i = 1; i <= M; i ++){k = query(1, 1, N, cut[i].x, cut[i].y);if(k > ans)ans = k;refresh(1, 1, N, cut[i].x + 1, cut[i].y - 1);}if(num[1] > ans)ans = num[1];printf("%d\n", ans);
}
int main()
{while(scanf("%d%d", &N, &M) == 2){if(M == 0)printf("%d\n", N);else{init();solve();}}return 0;
}

转载于:https://www.cnblogs.com/staginner/archive/2012/04/16/2451871.html

ZOJ 3511 Cake Robbery相关推荐

  1. zoj 3511 Cake Robbery(线段树)

    题目链接:zoj 3511 Cake Robbery 题目大意:就是有一个N边形的蛋糕.切M刀,从中挑选一块边数最多的.保证没有两条边重叠. 解题思路:有多少个顶点即为有多少条边,所以直接依照切刀切掉 ...

  2. zoj 3537 cake 切蛋糕 区间DP+凸包+递归 最优三角形剖分

    题意:给出一些点表示多边形蛋糕的定点的位置(如果蛋糕是凹多边形就不能切),切蛋糕时每次只能在顶点和顶点间切,每一次切蛋糕都有相应的代价,给出代价的公式,问把蛋糕切成多个三角形的最小代价是多少 由于有可 ...

  3. fastadmin html模板,使用fastadmin的页面异常模板

    1.效果图 2.修改tp异常页面的模板文件( /thinkphp/tpl/think_exception.tpl ),将文件中的内容全部替换成下面的内容然后保存即可(若发生报错,请注意语言包问题) $ ...

  4. kuangbin带你飞专题合集

    题目列表 [kuangbin带你飞]专题一 简单搜索 [kuangbin带你飞]专题二 搜索进阶 [kuangbin带你飞]专题三 Dancing Links [kuangbin带你飞]专题四 最短路 ...

  5. 算法学习经典例题整理

    陆续会对本篇博客进行更新! 搜索:https://vjudge.net/contest/292597 区间DP:https://vjudge.net/contest/293892 树状背包:https ...

  6. kuangbin带你飞 专题1-23 题单

    kuangbin大神,对于打过ACM比赛的ACMer,无人不知无人不晓. 在此,附上vjudge平台上一位大神整理的[kuangbin带你飞]专题目录链接. [kuangbin带你飞专题目录1-23] ...

  7. 老鱼的-kuangbin专题题解

    kuangbin专题问题一览 专题一 简单搜索 POJ 1321 棋盘问题 POJ 2251 Dungeon Master POJ 3278 Catch That Cow POJ 3279 Flipt ...

  8. 数据结构---线段树

    线段树 转载请注明出处,谢谢!http://blog.csdn.net/metalseed/article/details/8039326  持续更新中···   一:线段树基本概念 1:概述 线段树 ...

  9. 动态规划总结与题目分类

    源博客链接:http://blog.csdn.net/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间效率高,代码量少 ...

  10. 【转】线段树题目 汇总 讲解(by not only success)

    转载自:http://www.notonlysuccess.com/ 非常喜欢他的代码风格以及简洁的思路,感谢notonlysuccess! PS:他的个人网站好像是上不去了-.- 线段树 很早前写的 ...

最新文章

  1. 常见报错——Uncaught TypeError: document.getElementsByClassName(...).addEventListener is not a function...
  2. P3916 图的遍历
  3. 【Groovy】编译时元编程 ( 编译 ASTTransformation | 打包 ASTTransformation 字节码文件 | 编译 Groovy 类同进行编译时处理 )
  4. web.xml 中的listener、 filter、servlet 加载顺序及其详解
  5. 微分方程_微分方程 | 线性微分方程组的求解(上)
  6. 即这样的WZSZF01代码是错误的
  7. 杭电1108java_按照这个步骤来刷题,迷茫的你两个月亦能成为王者
  8. 4 FI配置-财务会计-创建会计科目表或总账科目表(COA-Chart of Account)
  9. pycharm引用python_在Python/Pycharm中找不到引用“xxx”
  10. nodejs async await promise理解
  11. 软件测试—软件测试基础知识—用例模板
  12. 安卓蓝牙键盘切换输入法_超薄无线蓝牙双模罗技K580键盘,自由切换享受打字快乐...
  13. qt 控件坐标系_Qt中,如何找准控件坐标
  14. 移动端报表JS开发演示样例
  15. 安装django步骤
  16. SIP协议详解eXosip源码库用法分析
  17. uni-app改变radio的默认样式 去掉小对号
  18. windows系统c++/VS2019编译gRPC
  19. TIC TAC TOE 井字游戏
  20. 微观经济学--第4章 供给与需求的市场力量

热门文章

  1. CoreBluetooth Central模式 Swift版
  2. Ubuntu下远程访问MySQL数据库
  3. boost::array与std::vector使用与性能
  4. 【算法】LeetCode算法题-Length Of Last Word
  5. OpenStack混合云的集成问题如何克服?
  6. [css]通过transform缩放邮件客户端h5页面
  7. Jquery-easyUI-datagrid参数之 queryParams
  8. js学习笔记(新手向)
  9. linux 异步信号的同步处理方式
  10. 命令行配置Windows SNMP服务