[BZOJ3441]乌鸦喝水
来源:互联网 发布:淘宝小号怎么申请 编辑:程序博客网 时间:2024/04/28 12:25
题目链接:BZOJ3441
分析
1. 乍一看,
2. 首先,预处理出每个水缸够喝多少次,然后按照次数从小到大排序。
3. 设
4. 当处理第
5. 然后对于
6. 因为水缸按可饮用次数排序,那么排在后面的水缸用光的时刻一定比前面的晚,于是
7. 详细见代码。
上代码
#include <bits/stdc++.h>using namespace std;const int N = 1e5 + 10;int n, m, L;inline int read() { char ch; int ans = 0, neg = 1; while (ch = getchar(), ch < '0' || ch > '9') if (ch == '-') neg = -1; while (ch >= '0' && ch <= '9') ans = ans * 10 + ch - '0', ch = getchar(); return ans * neg;}int cnt, pos, cir;struct nodePoi { int id, val; nodePoi() {} nodePoi(int a, int b) : id(a), val(b) {} inline bool operator < (const nodePoi &a) const { return val < a.val; }} poi[N];int sum[N]; // 用树状数组维护区间内可用水缸数量#define lowbit(a) (a & (-a))int query(int a) { int ans = 0; for (int i = a; i; i -= lowbit(i)) ans += sum[i]; return ans;}void modify(int a, int b) { for (int i = a; i <= n; i += lowbit(i)) sum[i] += b;}int findPlc(int a) { // 二分查找i在下一轮能撑到的时候 int l = pos, r = n; int mid, ans = l; while (l <= r) { mid = (l + r) >> 1; if (query(mid) - query(pos) > a) r = mid - 1; else l = mid + 1, ans = mid; } return ans;}int main() { n = read(), m = read(), L = read(); for (int i = 1; i <= n; i++) poi[i] = nodePoi(i, read()); for (int i = 1; i <= n; i++) { poi[i].val = (L - poi[i].val) / read() + 1; modify(i, 1); } sort(poi + 1, poi + n + 1); pos = cnt = cir = 0; for (int i = 1; i <= n; i++) { if (poi[i].val < cnt) { modify(poi[i].id, -1); continue; } int tmp; while (cir < m && (tmp = query(n) - query(pos)) + cnt <= poi[i].val) cnt += tmp, cir++, pos = 0; // 一趟一趟的更新 if (cir >= m) break; pos = findPlc(poi[i].val - cnt), cnt = poi[i].val; modify(poi[i].id, -1); // 当前桶用完了 } printf("%d\n", cnt); return 0;}
以上
0 0
- BZOJ3441 乌鸦喝水
- [BZOJ3441]乌鸦喝水
- bzoj3441: 乌鸦喝水
- 乌鸦喝水
- 乌鸦喝水
- 新编乌鸦喝水
- BZOJ:3441 乌鸦喝水
- 线段树 乌鸦喝水
- “乌鸦喝水”是寓言吗?
- 乌鸦喝水(异常处理版 >_<)
- 家有千金之乌鸦喝水
- bzoj3441
- bzoj 3441: 乌鸦喝水(说实话有生之年没有见过这么难的模拟)
- 权利的游戏-三眼乌鸦喝水算法Aesop's Fables
- 权利的游戏-三眼乌鸦喝水算法Aesop's Fables
- 喝水
- 乌鸦坐飞机
- 肌肤喝水
- 速写KMP字符串匹配算法
- Mac上tomcat服务器的安装、配置、启动、关闭
- Rxjava 背压笔记
- jvm内存区域的理解
- jquery.fly.js实现添加购物车效果、实现抛物线运动
- [BZOJ3441]乌鸦喝水
- c3p0和QueryRunner的结合使用,让开发更加简便
- MySQL的enum与set约束
- 53. Maximum Subarray
- 学习小记——后缀数组
- USB总线介绍
- strut2验证之XML声明式文档验证
- (转)ProgressDialog的hide()和dismiss()方法
- 参考网上资料,整理的华为编程要求