P3514 [POI2011]LIZ-Lollipop(规律+瞎搞)
题意
给一个只有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(规律+瞎搞)的更多相关文章
- URAL 1203. Scientific Conference(瞎搞)
题目链接 本来觉得这不是经典的贪心吗..果断水一次,wa了,看了看discuss,发现貌似不好水,土土的DP了一下,复杂度很高了,又T了...然后想想单调队列,二分什么的...不好往上加,直接搞了标记 ...
- Codeforces Gym 100610 Problem H. Horrible Truth 瞎搞
Problem H. Horrible Truth Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/1006 ...
- B. Salty Fish Go! -期望题(瞎搞题)
链接:https://www.nowcoder.com/acm/contest/104/B来源:牛客网 题意:A few days ago, WRD was playing a small game ...
- HDU5532 Almost Sorted Array(最长上升子序列 or 瞎搞个做差的数组)
题目链接:点我 题意:给定一个序列,询问是否能删除一个数让它成为非递减或者非递增的序列. 比如说 删除后的序列是1 3 3 5 或者5 3 3 1 或者1 3 5 或者5 3 1 都可以.只要满足删掉 ...
- TOJ3097: 单词后缀 (字典树 or map瞎搞)
传送门 (<---可以点击的~) 时间限制(普通/Java):1000MS/3000MS 内存限制:65536KByte 描述 有些英语单词后缀都是一样的,现在我们需要从给定的一堆单词里 ...
- 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 ...
- ubuntu--基础环境瞎搞集合
安装ubuntu系统后有很多东西需要自己瞎搞一下,这里把一些瞎搞的过程记录在这里,方便以后重新装系统后重新配置. 一.安装. 可以在windows下制作启动盘(软碟通),然后开机u盘启动即可安装,预留 ...
- Codeforces631C【栈维护+瞎搞】
题意: 百度. 思路: 如果该查询的R比前面的所有都大,那么前面所有都失效. 那么我先预处理出这些有效的. 那最坏的情况不就是栈里面元素(R)很多 n,n-1,n-2,n-3,n-4而且都是相反排序的 ...
- 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 ...
随机推荐
- threejs 入门教程1
最近在看threejs开发指南,总结一下制作最基础的3d场景的8步: 1. 设置场景大小 2. 创建WebGl渲染器 3. 指定根节点元素 4. 初始化场景 5. 添加相机到场景 6. 创建物体到场景 ...
- 1、Windows服务器 VS Linux服务器
- ASM磁盘组中的AU与条带
一.AU与条带(AU和条带就是一个分配单位,数据会被以一定单位分割,存储在多个磁盘中.分割单位的大小由AU.条带来决定. ASM有两种条带: 1.不可调粗粒度: 相当于ASM没有条带,或者说AU就是条 ...
- (2016北京集训十二)【xsy1542】疯狂求导
题解: 这题看起来很难...但是实际上并没有想象中的那么难 第一眼看上去不会求导公式怎么办?不要紧,题目背景非常良心的给出了题目中的导数计算公式 求完导合并同类项很恶心怎么办?不要紧,样例解释说明了不 ...
- luogu P1869 愚蠢的组合数(质因数+瞎搞)
题意 n<=105 题解 一个数是不是偶数就是看有没有二这个质因子. 所以我们先预处理每个数的阶乘的二这个质因子的数量 然后按公式判断就行了. #include<iostream> ...
- 洛谷P4994 终于结束的起点
希望是这道题的第一篇题解,并且真的做到了! upd 2018/11/4:规律补锅,让代码更加易懂 本来月赛时想打个表,打到一半,发现\(n\)稳定在\(m\)附近? 题目的意思是\(n < m ...
- 【BZOJ 1483】[HNOI2009]梦幻布丁
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 链表,启发式合并. 把x变成y,和y全都变成x. 不论是前者还是后者.连续段的个数都是相同的,不影响结果. 那么我们把x,y中出现次 ...
- [terry笔记]11gR2_DataGuard搭建_primary零停机
11gR2搭建dataguard环境,此篇文章是利用rman搭建dataguard,这样的好处是primary不用停机,当然,前提条件是primary已经开启归档. 相对于可以停机,零停机传送数据文件 ...
- Android中处理Touch Icon的方案
苹果的Touch Icon相对我们都比较熟悉,是苹果为了支持网络应用(或者说网页)添加到桌面需要的图标,有了这些Touch Icon的网页链接更加和Native应用更相像了.由于苹果设备IPod,IP ...
- 兔子--Android Support v4包丢失的解决的方法
在开发中,Android Support v4包丢失的解决的方法: Project->properties->Java Build Path->Libraries->Add E ...