abc370E Avoid K Partition

news/2024/10/7 18:14:33

有长度为N的数组A[i]和整数K,需要将A划分成连续子数组,要求每个子数组之和不能为K。问有多少种方案,答案对998244353取模。

分析:如果不考虑和不为K的限制,就是个O(n^2)的dp,通过前缀和可以优化成O(n)。现要求子数组和不为K,可以用容斥思想先全部加上,然后减去不符合条件的。

#include <bits/stdc++.h>
using i64 = long long;template<int MOD>
struct MInt {i64 x;int norm(i64 u) const {u%=MOD; if(u<0) u+=MOD; return u;}MInt(i64 v=0):x(norm(v)) {}int val() const {return x;}MInt operator-() const {return MInt(norm(MOD-x));}MInt inv() const {assert(x!=0); return power(MOD-2);}MInt &operator*=(const MInt &o) {x=norm(x*o.x); return *this;}MInt &operator+=(const MInt &o) {x=norm(x+o.x); return *this;}MInt &operator-=(const MInt &o) {x=norm(x-o.x); return *this;}MInt &operator/=(const MInt &o) {*this *= o.inv(); return *this;}friend MInt operator*(const MInt &a, const MInt &b) {MInt ans=a; ans*=b; return ans;}friend MInt operator+(const MInt &a, const MInt &b) {MInt ans=a; ans+=b; return ans;}friend MInt operator-(const MInt &a, const MInt &b) {MInt ans=a; ans-=b; return ans;}friend MInt operator/(const MInt &a, const MInt &b) {MInt ans=a; ans/=b; return ans;}friend std::istream &operator>>(std::istream &is, MInt &a) {i64 u; is>>u; a=MInt(u); return is;}friend std::ostream &operator<<(std::ostream &os, const MInt &a) {os<<a.val(); return os;}MInt power(i64 b) const {i64 r=1, t=x; while(b){if(b&1) r=r*t%MOD; t=t*t%MOD; b/=2;} return MInt(r);}
};
using mint = MInt<998244353>;void solve() {i64 N, K;std::cin >> N >> K;std::vector<i64> A(N + 1), B(N + 1);for (int i = 1; i <= N; i++) {std::cin >> A[i];}std::partial_sum(A.begin(), A.end(), B.begin());mint sum = 0;std::map<i64,mint> cnt;std::vector<mint> dp(N + 1);dp[0] = cnt[0] = sum = 1;for (int i = 1; i <= N; i++) {dp[i] = sum - cnt[B[i] - K];sum += dp[i];cnt[B[i]] += dp[i];}std::cout << dp[N] << "\n";
}int main() {std::cin.tie(0)->sync_with_stdio(0);int t = 1;while (t--) solve();return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Word中 Endnote 引用标蓝色

1. 打开word中的endnote加载项。如图所示,勾选这两个设置。 确认后会自动变为超链接,显示蓝色以及下划线。 2. 在样式设置中,将超链接的下划线取消。之后就会只显示蓝色引用。 结果显示:

中国大学生程序设计竞赛(秦皇岛)正式赛东北大学秦皇岛分校(SMU Autumn 2024 Team Round 1)

中国大学生程序设计竞赛(秦皇岛)正式赛东北大学秦皇岛分校(SMU Autumn 2024 Team Round 1) Problem A. 贵校是构造王国吗 I 思路 官方题解很清晰明了。代码 #include <bits/stdc++.h> using namespace std; #define int long long #define endl \n #define PII pair&…

多校 A 层冲刺 NOIP2024 模拟赛 03

多校 A 层冲刺 NOIP2024 模拟赛 03 T1 五彩斑斓(colorful) 签到题 直接暴力枚举是 \(O(n^4)\) ,考虑使用 \(bitset\) 优化,对每个点开个 \(bitset\),预处理它所在一行它及它之前相同颜色的位置,这样就只用枚举另一个点所在列,时间复杂度为 \(O(n^3+\frac{n^4}{w})\)。 T…

在浏览器上访问媒体资源配置【文件上传】

1.根urls.py文件中 from django.contrib import admin from django.urls import path, include, re_path from django.views.static import serve from django.conf import settingsurlpatterns = [# path(admin/, admin.site.urls),path(api/shipper/, include(apps.shipper.u…

高级程序语言设计第二次作业

姓名:袁志华 班级:软件工程2班 学号:102400231 班级网址:https://edu.cnblogs.com/campus/fzu/2024C 作业网址:https://edu.cnblogs.com/campus/fzu/2024C/homework/13282 图片: 第一题: 第二题: 第三题: 第四题: 第五题: 第六题: 第七题: 第八题:程序清单: 3.1…

macOS Sequoia 15.0.1 (24A348) 正式版 ISO、IPSW、PKG 下载

macOS Sequoia 15.0.1 (24A348) 正式版 ISO、IPSW、PKG 下载macOS Sequoia 15.0.1 (24A348) 正式版 ISO、IPSW、PKG 下载 iPhone 镜像、Safari 浏览器重大更新和 Apple Intelligence 等众多全新功能令 Mac 使用体验再升级 请访问原文链接:https://sysin.org/blog/macOS-Sequoi…

人群聚集监测预警系统

人群聚集监测预警系统采用AI视频智能分析技术,人群聚集监测预警系统通过在工地、工厂等场所已经安装监控摄像头,人群聚集监测预警系统对人员聚集情况进行实时监测,当人群聚集过于密集时,系统将自动发出警报,人群聚集监测预警系统并通过人工智能算法对人员的状态进行识别和…

智能烟火识别预警软件

智能烟火识别预警软件采用人工智能技术,智能烟火识别预警软件在工厂、工地等场所利用已经安装的摄像头,智能烟火识别预警软件对场内的烟花爆竹进行实时监测。当场内出现烟花爆竹时,智能烟火识别预警软件将自动发出警报,并通过人工智能算法通知现场管理人员进行处理。智能烟…