hdu2430 Beans 单调队列
// hdu2430 Beans 单调队列
//
// 题目意思:
// 求一个sum%p<=k的max(sum/p)
//
// 结题报告:
// 技巧,先求出前缀和,并记录前i项对p取余的值记为x,并记下位置pos
// 依照先按x从小到大。假设x同样按pos从小到大排序。 这样,问题就转换为
// 求一个最小的pos使得pos到i的值最大。
//
// 单调队列里面保持的就是对于当前的i最小的pos值(满足pos到i区间的sum是满足条件的)
// 由于数组递增,这样求得的sum一定是最大的,这样就能够了
//
// 感悟:
//
// 这题应该也能够用线段树做,做的话也是以i为端点,查找最小的pos。而这个pos在
// sum[i]%p-k,sum[i]%p之间(由于k>=(sum[i]-sum[pos])%p>0),维护最小值。 待我练练线段树
// 再加上自己更深的理解而单调队列也能实现以i为结尾的区间之前的最小的pos值,
// 感觉单调队列实在非常巧妙 #include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream> typedef long long ll; using namespace std;
const int MAX_N = 1e6 + 100;
struct node {
int pos;
int val;
}a[MAX_N],deq[MAX_N];
ll f[MAX_N];
int t;
int n,p,k; bool cmp(node a,node b){
if(a.val!=b.val)
return a.val < b.val;
return a.pos < b.pos;
} void input(){
cin >> n >> p >> k;
f[0] = 0;
for (int i=1;i<=n;i++){
cin >> f[i];
f[i] = f[i-1] + f[i];
a[i].val = (int)(f[i]%(ll)p);
a[i].pos = i;
} sort(a+1,a+n+1,cmp); } void solve(){
int head = 0,tail = 0;
ll mx = -1;
for (int i=1;i<=n;i++){
while(head < tail && deq[tail-1].pos >= a[i].pos)
tail--; deq[tail++] = a[i]; while(head < tail && a[i].val - deq[head].val > k)
head++; if (f[a[i].pos]%(ll)p<=k) mx = max(mx,f[a[i].pos]/p); else if (head < tail && deq[head].pos < a[i].pos){
mx = max(mx,(f[a[i].pos] - f[deq[head].pos])/p);
}
}
cout << mx << endl;
} int main(){
ios::sync_with_stdio(false);
//freopen("1.txt","r",stdin);
int t;
cin >> t;
int kase = 1;
while(t--){
input();
cout << "Case " << kase++ << ": ";
solve();
}
}
hdu2430 Beans 单调队列的更多相关文章
- HDU 2430 Beans (单调队列+公式化简)
题意:给你n袋豆子,每袋都有w[i]个豆子,接着任选连续任意个袋子的豆子合在一起放入容量为p的多个袋子里(每个袋子必须放满),问剩余的豆子数<=k时,能放满最多的袋子的个数 题解:个数与p都比较 ...
- BestCoder Round #89 B题---Fxx and game(单调队列)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5945 问题描述 输入描述 输出描述 输入样例 输出样例 题意:中文题,不再赘述: 思路: B ...
- 单调队列 && 斜率优化dp 专题
首先得讲一下单调队列,顾名思义,单调队列就是队列中的每个元素具有单调性,如果是单调递增队列,那么每个元素都是单调递增的,反正,亦然. 那么如何对单调队列进行操作呢? 是这样的:对于单调队列而言,队首和 ...
- FZU 1914 单调队列
题目链接:http://acm.fzu.edu.cn/problem.php?pid=1914 题意: 给出一个数列,如果它的前i(1<=i<=n)项和都是正的,那么这个数列是正的,问这个 ...
- BZOJ 1047 二维单调队列
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1047 题意:见中文题面 思路:该题是求二维的子矩阵的最大值与最小值的差值尽量小.所以可以考 ...
- 【BZOJ3314】 [Usaco2013 Nov]Crowded Cows 单调队列
第一次写单调队列太垃圾... 左右各扫一遍即可. #include <iostream> #include <cstdio> #include <cstring> ...
- BZOJ1047: [HAOI2007]理想的正方形 [单调队列]
1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2857 Solved: 1560[Submit][St ...
- hdu 3401 单调队列优化DP
Trade Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
- 【转】单调队列优化DP
转自 : http://www.cnblogs.com/ka200812/archive/2012/07/11/2585950.html 单调队列是一种严格单调的队列,可以单调递增,也可以单调递减.队 ...
随机推荐
- POJ 1101 译文
The Game 题意: Description One morning, you wake up and think: "I am such a good programmer. Why ...
- C#接入第三方支付一些小问题
13年第一次接入支付宝的时候,支付宝的api还不是很好用,费了些劲才完成,本月再次接入的时候发现已经很好用了,接入过程非常顺畅,只出现了一个小问题,我的金额默认是保留了4位小数,支付宝api只接受最多 ...
- SecureCRT连接Ubuntu报The remote system refused the connection.解决方案
使用SecureCRT连接到远程Ubuntu,连接失败报The remote system refused the connection. 进入Ubuntu系统,终端中敲入以下命令: ps -ef|g ...
- 关于MVC4.0版本以上的RegisterBundles用法
public class BundleConfig { //新建了一个项目文件,打开App_Start下的BundleConfig看看, public static void RegisterBund ...
- 使用File类操作文件或目录的属性
在学I/O流之前,我先总结一下使用File类操作文件或目录的属性. package com.File; import java.io.File; import java.io.IOException; ...
- 深圳面试一周记录——.NET(B/S)开发
个人简单信息:2011年毕业,最高学历大专,最近一份工作在广州:有做架构设计经验,有一年的带团队(10人左右)经验:互联网和行业软件公司都待过. 为免不必要的争论,本文说地址的就不说公司行业,说公司行 ...
- BZOJ 1740: [Usaco2005 mar]Yogurt factory 奶酪工厂 贪心 + 问题转化
Description The cows have purchased a yogurt factory that makes world-famous Yucky Yogurt. Over the ...
- Django 模型层(标签、过滤器、模板的继承与导入)
过滤器/自定义过滤器 模板语法中的过滤器类似于python中的内置方法,在我们把数据从后端通过rander传入到前端html文件中之后,在前端我们可以通过模板语法,对传入的数据再进行以通骚操作. 首先 ...
- eas之获取各模块系统状态信息
public void getSystemStatue() throws EASBizException, BOSException { CompanyOrgUnitInfo co ...
- 【编程工具】Vim编辑器的使用
1.Vim简介 Vim最初起源于古老的贝尔实验室,由"Bram Moolenaar等人"开发,是一个功能强大的文本编辑器,被推崇为类Vi编辑器中最好的一个. Vim是一个类 ...