[POI2011] LIZ-Lollipop

news/2024/9/19 2:33:52/文章来源:https://www.cnblogs.com/EternalEpic/p/18419664

一道有意思的思维题。首先我们知道如果能有一段和为 \(x\) 那么必然有一段和为 \(x - 2\) ,因为和为 \(x\) 的那一段的首位要么全为1,要么至少有一个2存在。

这样我们求出最大可表示偶数 \(max_0\) 和最大可表示奇数 \(max_1\),由数学归纳法可以知道比 \(max_0\) 小的所有偶数和比 \(max_1\) 小的所有奇数都可以被表示。

现在我们考虑求出一组可行的区间。首先最大的区间就是序列本身,而与他奇偶相异的最大值由数学归纳一定是从左至右或者从右至左的一段最长区间,可以用前缀和枚举求出。那么我们考虑每次让值减2,这样可以不漏的把奇偶性相同的数都枚举到。

const int N = 1e6 + 5;
int n, m, a[N], sum[N], L[N << 1], R[N << 1], mx[2]; char s[N];
inline void chk(int x, int l, int r) {if (x > mx[x % 2]) mx[x % 2] = x, L[x] = l, R[x] = r;
}signed main(void) {read(n), read(m); readstr(s + 1);for (int i = 1; i <= n; i++)sum[i] = sum[i - 1] + (a[i] = (s[i] == 'T' ? 2 : 1));L[sum[n]] = 1; R[sum[n]] = n; mx[sum[n] % 2] = sum[n];for (int i = 1; i < n; i++) chk(sum[i], 1, i), chk(sum[n] - sum[i], i + 1, n); int s0 = mx[0], l = L[mx[0]], r = R[mx[0]];while (l <= r) {if (a[l] + a[r] == 2) l++, r--;else if (a[l] == 2) l++;else r--;s0 -= 2;if (s0) L[s0] = l, R[s0] = r;}s0 = mx[1]; l = L[mx[1]]; r = R[mx[1]];while (l <= r) {if (a[l] + a[r] == 2) l++, r--;else if (a[l] == 2) l++;else r--;s0 -= 2;if (s0) L[s0] = l, R[s0] = r;}for (int i = 1, x; i <= m; i++) {read(x);if (mx[x % 2] < x) puts("NIE");else writeln(L[x], ' '), writeln(R[x]);}//fwrite(pf, 1, o1 - pf, stdout);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/799615.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#|.net core 基础 - 值传递 vs 引用传递

文章探讨了C#中值传递与引用传递的概念及其对值类型和引用类型变量的影响。值传递创建参数副本,不影响原变量;引用传递共享内存地址,方法内修改影响原变量。特别提到string视为值类型处理,C#中ref、out等修饰符可实现引用传递。不知道你在开发过程中有没有遇到过这样的困惑…

浅谈舞蹈链(DLX)

名字: \(DL\),\(Dancing\space Link\),舞蹈链,是由\(Donald\space Knuth\)提出的数据结构,用来优化 \(X\) 算法,所以叫\(DLX\) \(X\)算法详解 用于求解精确覆盖问题,精确覆盖问题的定义:给定一个由0-1组成的矩阵,是否能找到一个行的集合,使得集合中每一列都恰好包含一…

java基础 -IO流笔记

610,文件的基础知识 文件流 输入流和输出流都是相对 java程序内存 而言611,创建文件 在D盘下创建文件。package com.hspedu.file;import org.junit.jupiter.api.Test; import java.io.File; import java.io.IOException;//演示创建文件 public class FileCreate {public sta…

2024软件工程个人作业(第二次)

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13253这个作业的目标 学会使用aigc编写学习代码,明白aigc能做哪些不能做哪些学号 1022014251. 项目展示 1.1. GitHub 仓库链接 ruang…

Kubernetes Ingress

目录一、为什么需要 Ingress二、什么是Ingress,Ingress Controller三、Ingress 的工作原理四、Ingress 配置资源模版五、实例1、搭建 Ingress 环境1.1、Ingress-Nginx官网地址1.2、master 节点下载 deploy.yaml1.3、所有节点提前 pull 必须的镜像1.4、修改并应用 deploy.yaml 文…

JVM--解析运行期优化与JIT编译器

JVM开发团队一直在努力,缩小Java与C/C++语言在运行效率上的差距。 本篇博客,我们来谈一谈JVM(HotSpot)为了提高Java程序的运行效率,都实现了哪些激动人心的技术~ 1 JIT编译器的引入 首先我们这篇文章中所说的编译器都是指JVM的组成部分之一---即时编译器(JIT),与生成J…

十七,Spring Boot 整合 MyBatis 的详细步骤(两种方式)

十七,Spring Boot 整合 MyBatis 的详细步骤(两种方式) @目录十七,Spring Boot 整合 MyBatis 的详细步骤(两种方式)1. Spring Boot 配置 MyBatis 的详细步骤2. 最后:MyBatis 的官方文档:https://mybatis.p2hp.com/ 关于 MyBatis 的学习的详细内容,大家可以移步至:✏️✏️…

学习高校课程-软件工程-软件流程(ch3)

3.1 A GENERIC PROCESS MODEL 通用过程模型 线性流和迭代流演化流和并行流3.2 DEFINING A FRAMEWORK ACTIVITY 定义框架活动 What actions are appropriate for a framework activity, given the nature of the problem to be solved, the characteristics of the people doing…

字符编码发展史2 — ISO-8859-N

2.2. 第二个阶段 本地化2.2.1. ANSI 2.2.2. ISO/IEC 8859-N2.2.2.1. 什么是ISO/IEC 8859-N? 2.2.2.2. ISO 8859-1的编码表上一篇《字符编码发展史1 — ASCII和EASCII》我们讲解了字符编码的起源ASCII和EASCII。本篇我们将继续讲解字符编码的第二个发展阶段中的ISO 8859-N。 2.…

?

CF1194G 在外层枚举\(x\)和\(y\),令\(x=x\times t,y=y\times t\),且\(x\times t\)十进制包含\(x\),\(y\)同理。 因为有进位,从低位向高位dp。 设\(f[T][0/1][0/1][i][j][0/1][0/1]\)表示处理到第T位,在当前这些为中\(x\times t\)是否大于\(n\),\(y\times t\)是否大于\(n\),…