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 ...
随机推荐
- Linux系统安装Redis数据库
Redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorte ...
- weboffice7
document.all.WebOffice1.ShowToolBar = false;
- xBIM 基础11 WeXplorer 常用事件
系列目录 [已更新最新开发文章,点击查看详细] 本篇将介绍查看器在不同场合触发的事件.所有这些都记录在xViewer中. 如果您从Web服务器运行本教程,可以在此处查看完整的实例.并且确保您的 ...
- Web前端错题模糊题记录
title: Web前端错题模糊题记录 toc: true date: 2018-09-20 10:04:36 categories: Web tags: HTML CSS JavaScript HT ...
- LeetCode hard 668. Kth Smallest Number in Multiplication Table(二分答案,一次过了,好开心,哈哈哈哈)
题目:https://leetcode.com/problems/kth-smallest-number-in-multiplication-table/description/ 668. Kth S ...
- Servicification
Servicification Summary The Chromium codebase now supports many platforms and use cases. In response ...
- 服务器搭建域控与SQL Server的AlwaysOn环境过程(一) 搭建域控服务器
0 准备阶段 1. Windows Server 服务器 3台(其中域控服务器配置可降低一个水准,目前博主试用的是:域控服务器--2核4G 数据库服务器(节点)--4核8G ) 2. SQL Serv ...
- TP5 错误信息提示入坑指南
查遍了百度,基本都是在 config.php 开启调试 然后还有一个错误信息提示 然后做完这些以后,很神奇的事情发生了! 那就是居然没有任何鬼用.依旧是提示页面错误!什么鬼信息都没有! 然后发现在 ...
- 查看centos7启动项
[root@k8s-master ~]# chkconfig Note: This output shows SysV services only and does not include nativ ...
- 【C语言】递归函数DigitSum(n)
//写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和, //比如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19 #include <std ...