当前位置: 首页 > news >正文

ABC 370 E - Avoid K Partition

原题链接:E - Avoid K Partition

题意:给长度为n的数组,将数组划分成任意份,但是每一份的总和都不能是k,问有多少种分割方法。

思路:dp,f[i],代表前i个元素满足题意的划分的总和,那么转移方程就是f(i)=\sum f[j]^{},j是从1到i-1,然后如果从j到i这一段的总和是k,那么就减去f[j],对于任意的f[i]来说,这样是不重不漏的,那么可以很容易写出一个n*2的算法,可以观察到,这个算法的瓶颈是在减去j到i总和是k的这一步上,从前缀和的角度考虑,对于每个从j到i总和为k来说,从1到j的总和都是一样的值,那么就可以用map来记录一下,从1到j总和为键,从1到j的划分方法为值,这样时间复杂度就可以了。

//冷静,冷静,冷静
//调不出来就重构
//#pragma GCC optimize(2)
//#pragma GCC optimize("O3")
#include<bits/stdc++.h>
#define endl '\n'
#define count2(x) __builtin_popcountll(x)
#define is2(x) __builtin_ffsll(x)
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<ll,ll> pii;
const int N=1e6+10,mod=998244353;
ll pre[N],p[N],f[N];
void Jiuyuan()
{ll n,k;cin>>n>>k;for(int i=1;i<=n;i++){cin>>p[i];pre[i]=pre[i-1]+p[i];}map<ll,ll> op;op[0]=1;f[0]=1;ll sum=1;for(int i=1;i<=n;i++){f[i]=(sum-op[pre[i]-k]%mod+mod)%mod;op[pre[i]]=(op[pre[i]]+f[i])%mod;sum=(sum+f[i])%mod; }cout<<f[n];
}
int main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);ll T=1;
//	cin>>T;while(T--){Jiuyuan();}return 0;
}

http://www.lryc.cn/news/434404.html

相关文章:

  • C++: set与map容器的介绍与使用
  • 单片机-STM32 看门狗(八)
  • iOS 18.1将上线新功能,可惜这波国内的小伙伴无缘了
  • MySQL中DML操作(二)
  • LLMs技术 | 整合Ollama实现本地LLMs调用
  • 【C-实践】文件服务器(3.0)
  • LeetCode 2181.合并零之间的节点
  • 千益畅行,共享旅游卡,引领旅游新潮流
  • K均值聚类
  • 【Ubuntu】安装常用软件包
  • 探索全光网技术 | 全光网产品解决方案整理-(宇洪科技)
  • 资料分析(2)
  • 百元以下蓝牙耳机性价比之王品牌?四大高能性价比机型推荐
  • 考场考生行为检测数据集 7000张 带标注 voc yolo
  • 深度学习算法,该如何深入,举例说明
  • 舵机的原理及应用
  • Nacos与Eureka--微服务注册中心
  • Android 调试桥——ADB
  • 闲鱼放弃成为淘宝复刻版了吗?上线学生专属交易交流版块“学生鱼”频道
  • 【学习笔记11】如何找到twitter中自己的cookie?
  • 新办建筑智能化专项乙级设计资质,郑州企业需要达到哪些要求?
  • 项目管理:项目执行过程中的控制点——基线
  • NVIDIA驱动学习
  • 小小GCD、LCM拿下拿下
  • 如何集成Android平台GB28181设备接入模块?
  • mysql——关于表的增删改查(CRUD)
  • docker 重启容器且修改服务映射端口
  • 智能提取:OfficeImagesExtractor让文档图片提取更简单
  • 【LLM论文日更】| LLM2Vec揭秘大型语言模型的文本嵌入潜能
  • 大模型微调有必要做吗?LoRa还是RAG?