题意

给一个只有1和2的序列,每次询问有没有一个子串的和为x

( 1≤n,m≤1 000 000 )kkk ( 1≤k≤2 000 000 )

题解

我觉得是道好题。

主要是证明一个性质:假如有一个字串的和为偶(奇)数,那么小于这个偶(奇)数的所有偶(奇)数一定等于这个串的某个字串的和。

我们考虑这个串的边界l,r

假设l==1,r==1那么l++,r--,和可以减2

假设l==2,r==1那么l++,和可以减2;

假设l==1,r==2那么r--,和可以减2;

假设l==2,r==2那么l++或r--和可以减2;

所以我们找到可以用一个串表示的最大偶(奇)数然后一直缩小这个区间就行。

 #include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=;
const int M=;
char s[M];
int n,m,a[N],sum,head,tail,l,r,ll[M],rl[M];
int main(){
scanf("%d%d",&n,&m);
cin>>s;
int len=strlen(s);
for(int i=;i<len;i++){
if(s[i]=='W')a[i+]=;
else a[i+]=;
}
for(int i=;i<=n;i++)
sum+=a[i];
head=;
tail=n;
while(a[head]!=&&head<=n)head++;
head++;
while(a[tail]!=&&tail>=)tail--;
tail--;
l=;r=n;
while(l<=r){
// cout<<sum<<" "<<l<<" "<<r<<endl;
rl[sum]=r;ll[sum]=l;
if(a[l]==&&a[r]==){
l++;r--;sum-=;
}
else if(a[l]==){
l++;sum-=;
}
else{
r--;
sum-=;
}
}
sum=;
if(head<=n||tail>=){
if(head-<n-tail){
l=head;
r=n;
for(int i=head;i<=n;i++)
sum+=a[i];
}
else{
l=;r=tail;
for(int i=;i<=tail;i++)
sum+=a[i];
}
// cout<<sum<<endl;
while(l<=r){
rl[sum]=r;ll[sum]=l;
if(a[l]==&&a[r]==){
l++;r--;sum-=;
}
else if(a[l]==){
l++;sum-=;
}
else{
r--;
sum-=;
}
}
}
for(int i=;i<=m;i++){
int k;
scanf("%d",&k);
if(ll[k]==&&rl[k]==)printf("NIE\n");
else printf("%d %d\n",ll[k],rl[k]);
}
return ;
}

P3514 [POI2011]LIZ-Lollipop(规律+瞎搞)的更多相关文章

  1. URAL 1203. Scientific Conference(瞎搞)

    题目链接 本来觉得这不是经典的贪心吗..果断水一次,wa了,看了看discuss,发现貌似不好水,土土的DP了一下,复杂度很高了,又T了...然后想想单调队列,二分什么的...不好往上加,直接搞了标记 ...

  2. Codeforces Gym 100610 Problem H. Horrible Truth 瞎搞

    Problem H. Horrible Truth Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/1006 ...

  3. B. Salty Fish Go! -期望题(瞎搞题)

    链接:https://www.nowcoder.com/acm/contest/104/B来源:牛客网 题意:A few days ago, WRD was playing a small game ...

  4. HDU5532 Almost Sorted Array(最长上升子序列 or 瞎搞个做差的数组)

    题目链接:点我 题意:给定一个序列,询问是否能删除一个数让它成为非递减或者非递增的序列. 比如说 删除后的序列是1 3 3 5 或者5 3 3 1 或者1 3 5 或者5 3 1 都可以.只要满足删掉 ...

  5. TOJ3097: 单词后缀 (字典树 or map瞎搞)

    传送门 (<---可以点击的~) 时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte 描述 有些英语单词后缀都是一样的,现在我们需要从给定的一堆单词里 ...

  6. 8VC Venture Cup 2016 - Elimination Round B. Cards 瞎搞

    B. Cards 题目连接: http://www.codeforces.com/contest/626/problem/B Description Catherine has a deck of n ...

  7. ubuntu--基础环境瞎搞集合

    安装ubuntu系统后有很多东西需要自己瞎搞一下,这里把一些瞎搞的过程记录在这里,方便以后重新装系统后重新配置. 一.安装. 可以在windows下制作启动盘(软碟通),然后开机u盘启动即可安装,预留 ...

  8. Codeforces631C【栈维护+瞎搞】

    题意: 百度. 思路: 如果该查询的R比前面的所有都大,那么前面所有都失效. 那么我先预处理出这些有效的. 那最坏的情况不就是栈里面元素(R)很多 n,n-1,n-2,n-3,n-4而且都是相反排序的 ...

  9. BZOJ 4236: JOIOJI map瞎搞

    分别记录J,O,I,的个数 cnt[char][i] 表示处理到第i位,char的个数 显然当且仅当 cnt[J][i] - cnt[O][i] == cnt[J][j-1] - cnt[O][j-1 ...

随机推荐

  1. python网页问题

    #django-admin不是个命令 添加环境变量 D:\Python36\Scripts #localhost加载失败 命令行 python manage.py runserver 0.0.0.0: ...

  2. 《汇编语言(第三版)》cmp指令

    # cmp指令 本质 cmp是比较指令,cmp的功能相当于减法. 格式 cmp 操作对象1,操作对象2 功能 计算操作对象1-操作对象2,但并不保存结果,可以根据flag标志寄存器来判断结果. 正向判 ...

  3. HTML基础——网站首页显示页面

    1.表格标签: border设置边框,align设置位置(居中等),bgcolor设置背景颜色,cellspacing设置边框之间的空隙,cellpadding设置边框与里面内容的间距. table表 ...

  4. Base64就是一种 基于64个可打印字符来表示二进制数据的表示方法

    Base64编码是从二进制到字符的过程. Base64编码主要用在传输.存储.表示二进制等领域,还可以用来加密,但是这种加密比较简单. byte[] byteArray = Encoding.UTF8 ...

  5. ActiveMQ学习笔记(7)----ActiveMQ支持的传输协议

    1. 连接到ActiveMQ Connector: Active提供的,用来实现连接通讯的功能,包括:client-to-broker,broker-to-broker.ActiveMQ允许客户端使用 ...

  6. SpringCloud学习笔记(16)----Spring Cloud Netflix之Hystrix Dashboard+Turbine集群监控

    前言: 上一节中,我们使用Hystrix Dashboard,只能看到单个应用内的服务信息.在生产环境中,我们经常是集群状态,所以我们需要用到Turbine这一应用. 作用:汇总系统内的多个服务的数据 ...

  7. vue v-if的使用

    代码部分 <el-row> <el-col :span="20"> <template v-for="(node,i) of hierarc ...

  8. HDU Integer's Power(容斥原理)

    题意 求[l,r]的最大指数和(1<=l,r<=10^18) 最大指数和(如64=8^2=4^3=2^6,所以64的最大指数和是6) 题解 很明显我们可以先求出[1,n]的最大指数和,然后 ...

  9. python做的 QQ未读消息图像

    #!/usr/bin/pythonfrom PIL import Image ,ImageDraw, ImageFont#打开所在的文件im=Image.open('test.jpg')#获取图片对象 ...

  10. caioj 1161 欧拉函数3:可见点数

    (x, y)被看到仅当x与y互质 由此联想到欧拉函数 x=y是1个点,然后把正方形分成两半,一边是φ(n) 所以答案是2*∑φ(n)+1 #include<cstdio> #include ...