ABC370 E - Avoid K Partition

求一个序列的合法划分方案数。一种划分合法当且仅当没有一个子串的和是 \(k\)。

由于是否存在子串和为 \(k\) 很重要,因此考虑将它加入状态设计中,记 \(f[i][0/1]\) 表示 \(1 \sim i\),\(i\) 处结束,还没有 / 已有和为 \(k\) 的子段,方案数。

用 \(s[i]\) 表示前缀和,得到朴素的 \(O(n^2)\) 转移:

\[f[i][0] = \sum_{0 \le j \lt i \cap s[i] - s[j] \ne k} f[j][0]
\]
\[f[i][1] = \sum_{0 \le j \lt i}f[j][1] + \sum_{0 \le j \lt i \cap s[i] - s[j] = k} f[j][0]
\]

发现 \(a[i], k\) 可以是负数,因此 \(s\) 没有单调性,不好直接找每个 \(i\) 对应的 \(j\),可能也不止一个。但对于固定的 \(i\),\(s[j] = s[i] - k\) 是固定的,因此我们可以对于每个 \(s[j]\) 都实时维护 \(\sum{f[j][0]}\),值域较大,用 \(map\) 实现就 ok。最后对 \(f[][0/1]\) 分别记录前缀和就可以做到 \(O(nlogn)\)。转移没什么变化,直接看代码,最后记得取模变正数。

#include<bits/stdc++.h>
#define F(i,l,r) for(int i(l);i<=(r);++i)
#define G(i,r,l) for(int i(r);i>=(l);--i)
#define int ll
using namespace std;
using ll = long long;
const int N = 2e5 + 5;
const int mod = 998244353;
int f[N][2], s[N];
int n, k, a[N];
map<int, int> mp;
signed main(){
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> n >> k;
F(i, 1, n) {
cin >> a[i];
s[i] = s[i - 1] + a[i];
}
int sm0 = 1, sm1 = 0;
mp[0] = 1;
F(i, 1, n){
int ret = mp[s[i] - k];
f[i][0] = (sm0 - ret) % mod;
f[i][1] = (sm1 + ret) % mod;
(mp[s[i]] += f[i][0]) %= mod;
(sm0 += f[i][0]) %= mod;
(sm1 += f[i][1]) %= mod;
}
cout << (f[n][0] + mod) % mod << '\n';
return fflush(0), 0;
}

ABC370 E - Avoid K Partition的更多相关文章

  1. Lintcode: Partition Array

    Given an array "nums" of integers and an int "k", Partition the array (i.e move ...

  2. Partition Array

    Given an array nums of integers and an int k, partition the array (i.e move the elements in "nu ...

  3. 【Offer】[40] 【最小的K个数】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 输入n个整数,找出其中最小的k个数.例如,输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 牛客网刷题地 ...

  4. 线性时间求取第 K 大数

    求 Top K 的算法主要有基于快速排序的和基于堆的这两种,它们的时间复杂度都为 \(O(nlogK)\).借助于分治思想,以及快速排序的区间划分,我们可以做到 \(O(n)\) 时间复杂度.具体算法 ...

  5. 用Java来写常见的排序算法

    随着校招的临近 算法是校招中很重要的一个部分 总结了常见几种排序算法,各种算法的时间复杂度和空间复杂度大家也需要多了解下 package com.huwei.sort; /** * 各种排序算法 * ...

  6. Python字符串str的方法使用

    #!usr/bin/env python# -*-coding:utf-8-*-#字符串通常用双引号或单引号来表示:'123',"abc","字符串"#str字 ...

  7. List.Sort以及快速排序ZZ

    经常看到有人因为使用.net中的集合类处理海量数据时性能不够理想,就武断的得出.net不行,c#也不行这样的结论.对于.net framework这样的类库来说,除了性能以外,通用性和安全性同样重要, ...

  8. Java中各种排序算法

    package org.rut.util.algorithm.support; import org.rut.util.algorithm.SortUtil; /** * @author treero ...

  9. c语言:快速排序

    练手代码(分治实现): input: int input[] = {12,6,3,9,10,6,2}; output: ======================= len = 7 input[0] ...

  10. 排序算法总结(C++版)

    总结下学过的排序算法,方便以后用到. 1.插入排序——将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表. void insertSort(int a[],int len) { ; ...

随机推荐

  1. 后缀数组--SA--字符串

    SA (Suffix Array) -- 后缀数组 简介 这里明白两个定义: \(SA_i\) : 按字典序排列后大小为 \(i\) 的后缀的后缀头的下标. \(Rank_i\) : 后缀头的下标为 ...

  2. 在 SQLAlchemy 中实现数据处理的时候,实现表自引用、多对多、联合查询,有序id等常见的一些经验总结

    有时候,我们在使用SQLAlchemy操作某些表的时候,需要使用外键关系来实现一对多或者多对多的关系引用,以及对多表的联合查询,有序列的uuid值或者自增id值,字符串的分拆等常见处理操作. 1.在 ...

  3. 《花100块做个摸鱼小网站! 》第五篇—通过xxl-job定时获取热搜数据

    ️基础链接导航️ 服务器 → ️ 阿里云活动地址 看样例 → 摸鱼小网站地址 学代码 → 源码库地址 一.前言 我们已经成功实现了一个完整的热搜组件,从后端到前端,构建了这个小网站的核心功能.接下来, ...

  4. 13 Python面向对象编程:装饰器

    本篇是 Python 系列教程第 13 篇,更多内容敬请访问我的 Python 合集 Python 装饰器是一种强大的工具,用于修改或增强函数或方法的行为,而无需更改其源代码.装饰器本质上是一个接收函 ...

  5. Qml 实现仿前端的 Notification (悬浮出现页面上的通知消息)

    [写在前面] 经常接触前端的朋友应该经常见到下面的控件: 在前端中一般称它为 Notification 或 Message,但本质是一种东西,即:悬浮弹出式的消息提醒框. 这种组件一般具有以下特点: ...

  6. ASP.NET Core – Custom Input formatters For Partial Update and Handle Under-posting

    前言 之前的文章有谈过关于 ASP.NET Core 处理 under-posting 的方式. 它会使用 class default value. 许多时候这可能不是我们期望的. 比如当我们想要 p ...

  7. 26.删除有序数组中的重复项 Golang实现

    题目描述: 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度.元素的 相对顺序 应该保持 一致 .然后返回 nums 中唯 ...

  8. 《TensorFlow+Keras自然语言处理实战》已出版

    <TensorFlow+Keras自然语言处理实战>已出版 当当京东天猫均有出售.清华社官网信息如下: http://www.tup.tsinghua.edu.cn/booksCenter ...

  9. CTF中特别小的EXE是怎么生成的

    我们在打CTF时候,出题的爷爷们给出的exe都很小 就10k左右,有的甚至就5k,那时候我很郁闷啊.现在我也能了啊哈哈 不多bb按如下操作: 我们来看看正常的release生成的代码 #include ...

  10. 利用 ACME 实现SSL证书自动化配置更新

    最近收到腾讯云的通知SSL证书要到期了,本想直接申请的发现现在申请的免费SSL证书有效期只有90天了,顺便了解了一下原因是包括Google在内的国际顶级科技公司一直都有在推进免费证书90天有效期的建议 ...