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

AcWing 5438. 密接牛追踪2 区间覆盖问题的详细解释

5438. 密接牛追踪2 - AcWing题库

题意:计算用最少的点覆盖1的区间;

思路:记每一个连续的1的区间长度为cnt,则cnt=(2*day+1)*点的个数,所以点的个数就是 cnt/(2*day+1) 上取整(要覆盖完),可知day越大,所需的点的个数越小,因此要最大化day;即计算每个连续1的区间的最大day取交集,再用记录的所以cnt和maxday计算出最少的点的数量;   计算区间maxday时,分情况讨论[区间在中间时,因为两边有0,2*maxday<= cnt 所以maxday=(cnt -1)/2],[区间在两边时,maxday=cnt-1,即从一端开始扩展]



const int N = 3e5 + 10,T = 20;

int n;
char s[N];
vector<int> cnt;//所有连续1的区间长度

void solve()
{
	cin >> n;
	for (int i = 1;i <= n;i ++) cin >> s[i];
	
	int maxday = n;
	for (int i = 1;i <= n;i ++)
	{
		if (s[i] == '0') continue;
		int j = i + 1;//第一天是1
		while(j <= n && s[j] == '1') j ++;
		int sum = j - i;//连续1的长度
		cnt.push_back(sum);
		int day = (sum - 1) / 2;//假设为中间的情况
		if (i == 1 || j == n + 1) day = sum - 1;//是两边的情况
		maxday = min(maxday,day);//取交集
		i = j;
	}
	LL ans = 0;
	for (auto &t : cnt)
	{
		ans += (t + 2 * maxday) / (2 * maxday + 1);
	}
	
	cout << ans << endl;
}	





相关文章:

  • 关闭Windows安全中心,解析与实操指南
  • Git基础之工作原理
  • Spark 3.0核心新特性解析与行业应用展望
  • Docker部署Ragflow(完美解决502 bad gateway)
  • 【RocketMQ 存储】- 异常退出恢复逻辑 recoverAbnormally
  • 机器学习数学基础:44.多元线性回归
  • VTK笔记- 3D Widget类 vtkSplineWidget 样条部件
  • Hadoop项目中的问题(1)——NetworkManager 和 network 服务冲突
  • mysql经典试题共34题
  • fastjson漏洞#不出网#原理#流量特征
  • CD10.【C++ Dev】类和对象(1)
  • 用户仿真任务调度管理平台数据库设计
  • 使用Qt调用HslCommunication(C++调用C#库)
  • 微服务拆分-远程调用
  • 电子学会—2024年12月青少年软件编程(图形化)级等级考试真题——猜年龄互动小游戏
  • Linux之Web控制台管理系统命令终端管理系统(保姆级)
  • 精选一百道题备赛蓝桥杯 —— 1.子串简写
  • 【AI】Deepseek本地部署探索,尝试联网搜索
  • 碰撞率降低57.4%!VLM-AD显著提升自动驾驶规划准确性,无需VLM实时推理
  • 使用 Docker 构建不同 Node 环境下的 Hexo 调试环境
  • 上海劳模风采馆焕新升级后重新开放,展示480位劳模先进故事
  • 图集|俄罗斯举行纪念苏联伟大卫国战争胜利80周年阅兵式
  • 上海市委常委会会议暨市生态文明建设领导小组会议研究基层减负、生态环保等事项
  • 马上评丨维护学术诚信别陷入“唯AI检测”误区
  • 比特币价格时隔三个月再度站上10万美元
  • 我驻苏丹使馆建议在苏中国公民尽快撤离