传送门

题意:给一个长度为nnn的只有111和222的序列,多次询问给定xxx构造或判断无法构造一个区间和为xxx

注意到111和222实质上是改不改变奇偶性,所以往这上面考虑

我们发现如果一个区间[L,R][L,R][L,R]和为x(x>2)x(x>2)x(x>2),我们就可以构造出x−2x-2x−2。方法是如果端点有222把这个222去掉,否则两边都是111,把两边都去掉。

也就是说,如果xxx可以构造,那么小于xxx的奇偶性相同的正整数都可以构造出。

那我们只需要对奇数和偶数分别找出最大的即可。

显然[1,n][1,n][1,n]是其中一个。

然后找到离端点最近的111,整体挖掉就可以改变奇偶性,显然是最大的。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
#define MAXN 2000005
using namespace std;
int l[MAXN],r[MAXN];
char s[MAXN];
int a[MAXN];
int main()
{int n,m;scanf("%d%d",&n,&m);scanf("%s",s+1);int sum=0;for (int i=1;i<=n;i++) sum+=(a[i]=1+(s[i]=='T'));l[sum]=1,r[sum]=n;int k1=0,k2=0;while (a[k1+1]==2) ++k1;while (a[n-k2]==2) ++k2;if (k1<n-1||k2<n-1){if (k1<k2)   l[sum-2*k1-1]=k1+2,r[sum-2*k1-1]=n;else  l[sum-2*k2-1]=1,r[sum-2*k2-1]=n-k2-1;     }for (int i=sum;i>=3;i--){if (!l[i]) continue;if (a[l[i]]==2) l[i-2]=l[i]+1,r[i-2]=r[i];elseif (a[r[i]]==2) l[i-2]=l[i],r[i-2]=r[i]-1;else l[i-2]=l[i]+1,r[i-2]=r[i]-1;}while (m--){int x;scanf("%d",&x);if (!l[x]) puts("NIE");else printf("%d %d\n",l[x],r[x]);}return 0;
}

【POI2011】LIZ-Lollipop 【构造】相关推荐

  1. 【BZOJ2217】[Poi2011]Lollipop 乱搞

    [BZOJ2217][Poi2011]Lollipop Description 有一个长度为n的序列a1,a2,...,an.其中ai要么是1("W"),要么是2("T& ...

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

    2217: [Poi2011]Lollipop Time Limit: 15 Sec  Memory Limit: 64 MBSec  Special Judge Submit: 383  Solve ...

  3. bzoj 2528: [Poi2011]Periodicity【kmp+构造】

    神仙构造,做不来做不来 详见:http://vfleaking.blog.163.com/blog/static/174807634201329104716122/ #include<iostr ...

  4. Luogu3516 POI2011 Shift 构造

    传送门 题意:给出一个长为$N$的排列,有两种操作:$A$:将最后一个数字放到第一个:$B$:将第三个数字放到第一个.一次性使用某种操作$k$次写作$kA$或$kB$,其中在$kA$中$k < ...

  5. 洛谷P3516 PRZ-Shift [POI2011] 构造

    正解:构造 解题报告: 传送门! umm这题就是很思维的?就是想到了就A了想不到就做不出来,然而我也只能是做到理解不知道怎么想出来,,,感觉构造题什么的就很真诚,一点套路也没有,所以像我这种没有脑子只 ...

  6. BZOJ2217 [Poi2011]Lollipop 【贪心】

    题目链接 BZOJ2217 题解 如果只判定存不存在方案的话,我倒是想到可以将\(2\)拆成两个\(1\),其中一个不能作为区间开头,线段树优化计算补集方案数 但是一看这道题要输出方案啊,,, 怎么办 ...

  7. BZOJ2217 [Poi2011]Lollipop

    结论:假如存在一个子串和为x,那么一定存在一个前缀,和为x或x+1 证明:可以认为原串是由和为x的串在开头和结尾添加若干数得到,再后边添加数不会对产生和为x或x+1的前缀产生影响,所以只考虑在前边添加 ...

  8. Python练习题答案: CIS 122#12中的构造【难度:1级】--景越Python编程实例训练营,1000道上机题等你来挑战

    CIS 122#12中的构造[难度:1级]: 答案1: # For your convenience, the following functions from previous challenges ...

  9. LeetCode简单题之构造矩形

    题目 作为一位web开发者, 懂得怎样去规划一个页面的尺寸是很重要的. 所以,现给定一个具体的矩形页面面积,你的任务是设计一个长度为 L 和宽度为 W 且满足以下要求的矩形的页面.要求: 你设计的矩形 ...

最新文章

  1. java开发环境配置环境变量_3. Java开发环境的搭建:安装JDK,配置环境变量
  2. php和python哪个用了开发web好-php web与python web哪个好
  3. Openstack Tempest测试入门
  4. Python(数据库之表操作)
  5. ArcGIS Server服务器监控
  6. 看网络电子围栏如何做好周界安防
  7. ref 和out 关键字
  8. C#中IEnumerableT.Distinct()将指定实体类对象用Lambda表达式实现多条件去重
  9. Leetcode——最长递增子序列(leetcode 300)
  10. [MSSQL]也说SQL中显示星期几函数
  11. 每个tabpage中都有一个dategridview_宇宙中每个原子里都隐藏着一个巨大的秘密
  12. 高可用eureka服务发现实例
  13. 神经网络之智能科学与技术专业
  14. linux统计某种文件大小命令,linux下对符合条件的文件大小做汇总统计的简单命令...
  15. 硬件常见物料识别和单位换算
  16. 我为什么从 Google 辞职,开始为自己工作?
  17. apk一般放服务器哪个位置,apk放在服务器
  18. 10个热门大数据发展趋势
  19. Qsetting本地缓存PC端数据
  20. import cv2 报错(linux环境)ImportError: libGL.so.1: cannot open shared object file: No such file or direc

热门文章

  1. python kivy ios_Kivy跨平台技术开发iOS
  2. 最不像地球的45个地方,你都见过几个?
  3. 哈哈哈,程序员没有女朋友的原因,我终于找到了!
  4. python求斜边上的高_直角三角形斜边上的高怎么求
  5. 服务器的类型及作用是什么,按用途分类,服务器有哪些? - 问答库
  6. android gdb 远程调试工具,Android下用gdb远程调试办法
  7. long 对应oracle,【转】oracle number与java中long、int的对应
  8. 加时间水印_如何在手机照片上添加时间和日期?打开这个设置即可添加,超方便...
  9. java实现红包要多少钱_Java实现抢红包算法,附完整代码(公平版和手速版)
  10. php的old函数,laravel单元测试之phpUnit中old()函数报错解决