题目大意:

有一个长度为n的序列a1,a2,...,an。其中ai要么是1("W"),要么是2("T")

现在有m个询问,每个询问是询问有没有一个连续的子序列,满足其和为q

思路:

因为序列中只有1和2

所以一定存在一个前缀和等于x或x-1

当前缀和等于x直接输出即可

若等于x-1 则可以建一个r数组存储向后延伸有多少个连续的2

这样可以将这一段前缀和向后移

如果r 1较小 直接右移

否则向右移使右侧+1

具体可以手画来推

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#define inf 2139062143
#define ll long long
#define MAXN 2001000
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=x*+ch-'';ch=getchar();}
return x*f;
}
int n,T,hsh[MAXN],s[MAXN],r[MAXN];
char ch[MAXN];
int main()
{
n=read(),T=read();scanf("%s",ch+);
for(int i=;i<=n;i++) s[i]=s[i-]+((ch[i]=='W')?:),hsh[s[i]]=i;
int tmp=n+,x,k;
for(int i=n;i;i--) {if(ch[i]=='W') tmp=i,k=i;r[i]=tmp-i;}
while(T--)
{
x=read();
if(x==) printf("%d %d\n",k,k);
else if(hsh[x]) printf("%d %d\n",,hsh[x]);
else if(hsh[x-])
{
if(r[hsh[x-]+]>r[]) printf("%d %d\n",+r[],hsh[x-]+r[]+);
else if(r[hsh[x-]+]+hsh[x-]+<=n) printf("%d %d\n",+r[hsh[x-]+],hsh[x-]+r[hsh[x-]+]+);
else puts("NIE");
}
else puts("NIE");
}
}

网上的大佬好像都是用的前缀和x+1 大概会方便一些?

bzoj 2217 Lollipop的更多相关文章

  1. bzoj 2217 [Poi2011]Lollipop 乱搞 贪心

    2217: [Poi2011]Lollipop Time Limit: 15 Sec  Memory Limit: 64 MBSec  Special JudgeSubmit: 383  Solved ...

  2. BZOJ 2217: [Poi2011]Lollipop

    若sum可行 sum-2一定可行 序列和为ans 找出和ans奇偶性不同的最大的ans,即最靠左或最靠右的1的位置 更新答案 有spj #include<cstdio> using nam ...

  3. BZOJ 2217: [Poi2011]Lollipop 构造 + 思维

    Description 有一个长度为n的序列a1,a2,...,an.其中ai要么是1("W"),要么是2("T").现在有m个询问,每个询问是询问有没有一个连 ...

  4. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  5. BZOJ 2127: happiness [最小割]

    2127: happiness Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1815  Solved: 878[Submit][Status][Di ...

  6. BZOJ 3275: Number

    3275: Number Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 874  Solved: 371[Submit][Status][Discus ...

  7. BZOJ 2879: [Noi2012]美食节

    2879: [Noi2012]美食节 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1834  Solved: 969[Submit][Status] ...

  8. bzoj 4610 Ceiling Functi

    bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...

  9. BZOJ 题目整理

    bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...

随机推荐

  1. 11Oracle Database 视图

    Oracle Database 视图 视图语法 create [or replace] view <名字> as <select 语句> 视图用于简化查询,视图中实际存放的是一 ...

  2. python 使用time / datetime进行时间、时间戳、日期转换

    python 使用time 进行时间.时间戳.日期格式转换 #!/usr/bin/python3 # -*- coding: utf-8 -*- # @Time : 2017/11/7 15:53 # ...

  3. Shock wave

    ** shock wave thickness of shock wave is order of 1e-7 m why governed by Euler Equation? P334 shock ...

  4. 3.8.5 多重选择:switch语句

        在处理多个选项时,使用if/else结构显得有些笨拙.               Scanner in = new Scanner(System.in);             Syste ...

  5. 【Codeforces 1096D】Easy Problem

    [链接] 我是链接,点我呀:) [题意] 让你将一个字符串删掉一些字符. 使得字符串中不包含子序列"hard" 删掉每个字符的代价已知为ai 让你求出代价最小的方法. [题解] 设 ...

  6. win7 32位机安装VMware win7 64位虚拟机

    VMware10虚拟机怎么安装win7系统(详细教程):https://jingyan.baidu.com/article/86f4a73ec62e8f37d65269a1.html 然而上述教程想不 ...

  7. RMQ 模板一份

    ;i<n;i++) d[i][]=A[i]; ;(<<j)<=n;j++) ;i+(<<j)-<n;i++) ],d[i+(<<(j-))][j- ...

  8. hdu 2602 简单0-1背包模板题

    #include<stdio.h> #include<string.h> #define N 1100 int dp[N]; int main() { int n,t,m,a[ ...

  9. 又见GCD

    Problem Description 有三个正整数a,b,c(0<a,b,c<10^6),其中c不等于b.若a和c的最大公约数为b,现已知a和b,求满足条件的最小的c.   Input ...

  10. [bzoj 1093][ZJOI2007]最大半联通子图(强联通缩点+DP)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1093 分析: 首先肯定是先把强联通全部缩成一个点,然后成了一个DAG 下面要知道一点: ...