【ZOJ月赛】【二分查找】【A.Edward's Cola Plan】
2013-01-22 21:21
246 查看
【题目来源】http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=4929
【个人体会】这个题目是我在4小时50多分钟最后AC的,因为我一看这个题目时限是3S就有点心虚,怕为了搞这个题目而忽略了“可能”存在的水题,最后连这个题目也没搞出来。不过后来看到这个题目过的人数就发现了原来这个题目才是水题。。。
【题目大意】唧唧歪歪半天,意思很简单。就是对于每个朋友,在Pi和Qi-M中选一个大的,然后求和。接着,给出T组询问,每次M的值都在变化,要求每组询问的和。
【题目解析】根据Qi-Pi的差值进行排序,对于每组M,求出它在排序后的数组中的位置(二分查找),然后对于这个位置以前的所有人都选Pi,对于这个位置以后的所有人都选Qi-M。另外,预处理出Pi和Qi的前缀和。
【代码如下】
【个人体会】这个题目是我在4小时50多分钟最后AC的,因为我一看这个题目时限是3S就有点心虚,怕为了搞这个题目而忽略了“可能”存在的水题,最后连这个题目也没搞出来。不过后来看到这个题目过的人数就发现了原来这个题目才是水题。。。
【题目大意】唧唧歪歪半天,意思很简单。就是对于每个朋友,在Pi和Qi-M中选一个大的,然后求和。接着,给出T组询问,每次M的值都在变化,要求每组询问的和。
【题目解析】根据Qi-Pi的差值进行排序,对于每组M,求出它在排序后的数组中的位置(二分查找),然后对于这个位置以前的所有人都选Pi,对于这个位置以后的所有人都选Qi-M。另外,预处理出Pi和Qi的前缀和。
【代码如下】
#include <cstdio> #include <algorithm> using namespace std; struct Cola { int p, q; }A[100005]; int N, T, Sumq[100005], Sump[100005]; bool Cmp(const Cola &a, const Cola &b) { return ((a.q - a.p) < (b.q - b.p)); } void Solve() { sort(A + 1, A + 1 + N, Cmp); for (int i = 1; i <= N; i ++) { Sump[i] = Sump[i - 1] + A[i].p; Sumq[i] = Sumq[i - 1] + A[i].q; } for (int i = 1, M; i <= T; ++i) { scanf("%d", &M); int l = 1, r = N + 1, ans = -1; while (l <= r) { int m = (l + r) / 2; if (A[m].q - A[m].p < M) l = m + 1; else { ans = m; r = m - 1; } } if (ans == -1) printf("%d\n", Sump ); else printf("%d\n", Sump[ans - 1] + Sumq - Sumq[ans - 1] - M * (N - ans + 1)); } } void Init() { for (int i = 1; i <= N; ++i) scanf("%d%d", &A[i].p, &A[i].q); } int main() { while (scanf("%d%d", &N, &T) != EOF) { Init(); Solve(); } return 0; }
相关文章推荐
- 2014 Super Training #6 H Edward's Cola Plan --排序+二分
- [ZOJ 2112] Dynamic Rankings [块状链表+二分答案+二分查找]
- zoj 2029【二分查找】或【STL】
- ZOJ 3640--Missile【二分查找 && 最大流dinic && 经典建图】
- ZOJ 3676 Edward's Cola Plan
- 二分查找,你真的掌握了吗?
- 二分查找中的编程小问题
- 二分查找、折半查找、递归与非递归
- JavaScript图形化展示二分查找
- FZU - 2138 H - 久违的月赛之一【二分||方程+特判】
- 二分查找
- upc 4875 第k大数 二分查找
- 二分查找的几点思考
- 洛谷P4332 [SHOI2014]三叉神经树(LCT,树剖,二分查找,拓扑排序)
- Java实现数组二分查找及递归二分查找
- 二分查找注意点
- zoj 3349 Special Subsequence 【离散化二分 + 线段树优化dp】
- UVALive 6442 Coins on a Ring(二分查找答案)
- zoj3726_2013长沙区域赛(二分查找+预处理)
- (一)排序简介:直接插入排序、冒泡排序、二分查找排序