题目链接:http://acm.fzu.edu.cn/problem.php?pid=1914

题意:

给出一个数列,如果它的前i(1<=i<=n)项和都是正的,那么这个数列是正的,问这个数列的这n种变换里,

A(0): a1,a2,…,an-1,an

A(1): a2,a3,…,an,a1

A(n-2): an-1,an,…,an-3,an-2

A(n-1): an,a1,…,an-2,an-1

问有多少个变换里,所以前缀和都是正整数。

思路:因为变换是a[n]后面接着a[1]所以我们把数组a接到后面(即a[n+1]=a[1]..a[n+n]=a[n])。然后求一个前缀和。然后对于求以a[i]为起点的变换。即a[i],a[i+1],a[i+2]...a[n]...a[i-1]。当该变换满足全部前缀和都为正时,即a[i],a[i]+a[i+1],...,a[i]+...a[i+n]都为正。但是如果对于每个变换都用O(n)时间去计算每一个前缀和会TLE,所以预处理出原始数列的前缀和。那么上面的前缀和就可以转换成sum[i]-sum[i-1], sum[i+1]-sum[i-1],..,sum[i+n]-sum[i-1]。然后对于题目求的所有前缀和都为正,即在所有前缀和的最小值为正即可。那么就可以用滑动窗口维护最小值。用单调队列实现。 注意STL的deque会TLE,所以自己手写了的双端队列。

#define _CRT_SECURE_NO_DEPRECATE
#include<stdio.h>
#include<string.h>
#include<cstring>
#include<algorithm>
#include<queue>
#include<math.h>
#include<time.h>
#include<vector>
#include<iostream>
#include<string>
using namespace std;
typedef long long int LL;
const int MAXN = 1e6 + ;
LL sum[MAXN];
struct Deque{
int head, tail;
int val[MAXN];
Deque(){ head = ; tail = -; }
void push_back(int x){ val[++tail] = x; }
void pop_back(){ tail--; }
void pop_front(){ head++; }
int front(){ return val[head]; }
int back(){ return val[tail]; }
bool empty(){ return tail < head; }
void clear(){ head = ; tail = -; }
}deq;
int main(){
//#ifdef kirito
// freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
//#endif
// int start = clock();
int t, n, Ca = ; scanf("%d", &t);
while (t--){
scanf("%d", &n);
for (int i = ; i <= n; i++){
scanf("%lld", &sum[i]);
sum[i + n] = sum[i];
}
for (int i = ; i <= * n; i++){
sum[i] += sum[i - ];
}
int ans = ; LL tmpx = ; deq.clear();
for (int i = ; i < n; i++){
while (!deq.empty() && sum[deq.back()] > sum[i]){
deq.pop_back();
}
deq.push_back(i);
}
for (int i = n; i < * n; i++){
while (!deq.empty() && sum[deq.back()] > sum[i]){
deq.pop_back();
}
deq.push_back(i);
while (!deq.empty() && deq.front() <= i - n){
deq.pop_front();
}
if (sum[deq.front()] - sum[i - n] > ){
ans++;
}
}
printf("Case %d: %d\n", Ca++, ans);
}
//#ifdef LOCAL_TIME
// cout << "[Finished in " << clock() - start << " ms]" << endl;
//#endif
return ;
}

FZU 1914 单调队列的更多相关文章

  1. FZU 1894 志愿者选拔 (单调队列)

    /****************************************************************** 题目: 志愿者选拔(FZU 1894) 算法: 单调队列 算法思 ...

  2. FZU 1894 志愿者选拔(单调队列)

    传送门 Description 世博会马上就要开幕了,福州大学组织了一次志愿者选拔活动.参加志愿者选拔的同学们排队接受面试官们的面试.参加面试的同学们按照先来先面试并且先结束的原则接受面试官们的考查. ...

  3. FZU 2016 summer train I. Approximating a Constant Range 单调队列

    题目链接: 题目 I. Approximating a Constant Range time limit per test:2 seconds memory limit per test:256 m ...

  4. FZU 1894 志愿者选拔 单调队列

    训练赛的题…… 暴力一波明显超时…… 最近刚学stl 感觉是优先队列 但还是太会用…… 以后可以试一下优先队列…… 比赛之后百度了一下 发现是单调队列…… 看起来挺简单的 也算个模版题吧…… 总之思路 ...

  5. FZU 1894 志愿者选拔【单调队列】【monotone decreasing queue】

     Problem 1894 志愿者选拔 Accept: 1770    Submit: 5523 Time Limit: 1500 mSec    Memory Limit : 32768 KB  P ...

  6. 单调队列 && 斜率优化dp 专题

    首先得讲一下单调队列,顾名思义,单调队列就是队列中的每个元素具有单调性,如果是单调递增队列,那么每个元素都是单调递增的,反正,亦然. 那么如何对单调队列进行操作呢? 是这样的:对于单调队列而言,队首和 ...

  7. FZU1894 单调队列

    S - 1019 Time Limit:1500MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Sta ...

  8. 单调队列 poj2823,fzu1894

    题目链接:http://poj.org/problem?id=2823 用RMQ超时了,我想应该是不会的,看discuss说,之前RMQ过了. 维护两个单调队列. 单调递减的队列,每插入一个时: 超过 ...

  9. 暑期训练狂刷系列——Foj 1894 志愿者选拔 (单调队列)

    题目连接: http://acm.fzu.edu.cn/problem.php?pid=1894 解题思路: 因为出队和入队都满足队列的性质,优先单调队列的优先级有进入队列的顺序和人品的高低,在一段区 ...

随机推荐

  1. Python购物车程序

    1.要求用户输入工资,然后打印购物菜单 2.用户可以不断的购买商品,直到钱不够为止 3.退出时格式化打印用户已购买的商品和剩余金额 salary = int(input("请输入你的工资:& ...

  2. php无限极分类以及递归(thinkphp)

    php无限极分类: 无限极分类重点在于表的设计: 1在model中: class CatModel extends Model{ protected $cat = array(); public fu ...

  3. Windows10下的JDK环境配置。

    首先附上JDK资源: 下载地址:Java SE Development Kit 8u112 PS:32位系统下载X86,64位系统下载X64 JDK安装: 此处省略安装步骤..... PS:记住JDK ...

  4. 适配ios9出现的问题:-canOpenURL: failed for URL

    -canOpenURL: failed for URL: "wtloginmqq2://qzapp" - error: "(null)" 2015-09-13 ...

  5. 怎么把Maven项目转为动态Web项目?

  6. 微信小程序导航:官方工具+精品教程+DEMO集合(1月7更新)

    1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=14764346784612:简易教程:https://mp.weixin.qq.com/debug ...

  7. composer

    composer 是PHP框架的包安装工具,类似于bower ,npm.bundler. 是命令行工具,没有图形界面. 系统要求 运行 Composer 需要 PHP + 以上版本.一些敏感的 PHP ...

  8. QSS的应用

    1.在同一级别的widget中,如果指定widget有设置样式表,则在qss对该样式表的设置无效,对比验证: (StatusWidget未设置widget样式--运行截图) (StatusWidget ...

  9. xml读取节点

    <?xml version="1.0" encoding="utf-8"?> <tplcd type=" product=" ...

  10. 修复Linux Mint损坏的依赖

    第一种: sudo apt-get install -f 第二种 sudo aptitude install -f 注: 要是某软件xxx依赖损坏了,可以这样 sudo aptitude instal ...