首页 > 其他分享 >CF1858B The Walkway 图解

CF1858B The Walkway 图解

时间:2023-08-16 13:33:31浏览次数:42  
标签:lceil CF1858B 商店 int text init Walkway 饼干 图解

思路

注意:所有变量名与原题面相同。

因为 \(1\) 号点必须吃一块饼干,所以我们可以在 \(1\) 立一个不可删除的商店,记为 \(s_0\)。

注意:如果 \(1\) 号附近本身就有一个商店,那就不用立。

然后我们可以在 \(n + 1\) 的位置立一个不可删除的商店,作为一个结束标志,记为 \(s_{m + 1}\)。

image


然后我们可以进行分段分为 \(m + 1\) 段,即 \([s_0,s_1),[s_1, s_2),[s_2, s_3),\dots,[s_{m - 1},s_m),[s_m, s_{m + 1})\),注意是左闭右开区间

image

对于区间 \([l, r)\),我们要吃多少饼干呢?画一画就可以知道要吃 \({\left\lceil\frac{r - l}{d}\right\rceil}\) 。

利用这个公式,我们可以求出不删除商店要吃饼干的数量 \(\text{init}\),就是把每一段吃的饼干加起来。

即计算 \(\text{init} = \sum\limits_{i = [s_1 = 1]}^{m}\left\lceil\frac{s_{i + 1} - s_i}{d}\right\rceil\)。


实际上,如果要删掉 \(x\) 商店,

那么只要拿最初的 \(\text{init}\) 删除 \([s_{x - 1}, s_x)\) 和 \([s_x, s_{x + 1})\) 吃的饼干,这是在清除原有数据。

再加上 \([s_{x - 1}, s_{x - 1, x + 1})\) ,这是在计算删除商店后这一段会吃掉的饼干。

即 \(ans = \text{init} - \left\lceil\frac{s_x - s_{x - 1}}{d}\right\rceil - \left\lceil\frac{s_{x + 1} - s_x}{d}\right\rceil + \left\lceil\frac{s_{x + 1} - s_{x - 1}}{d}\right\rceil\),就是删掉 \(x\) 商店要吃的饼干了。

image

最后我们求出所有 \(ans\) 的最小值并统计一下数量 \(cnt\) 就可以了。


同时,我们要注意,如果 \(1\) 号点附近本身就有一个商店,那么删掉该商店以后,答案还是 \(\text{init}\),也要参与统计。

代码

#include <bits/stdc++.h>

#define int long long

using namespace std;

const int N = 200010;

int n, m, d;
int s[N];

inline int cnt(int l, int r) {
	int sz = r - l;
	if (sz % d == 0) return sz / d;
	return sz / d + 1;
}

void solve() {
	cin >> n >> m >> d;
	for (int i = 1; i <= m; i++) cin >> s[i];
	bool flag = true;
	if (s[1] != 1) {
		flag = false;
		m++;
		for (int i = m; i >= 2; i--) s[i] = s[i - 1];
		s[1] = 1;
	}
	m++;
	s[m] = n + 1;
	
	int init = 0;
	for (int i = 2; i <= m; i++) init += cnt(s[i - 1], s[i]);
	
	int minn = 0x3f3f3f3f3f3f3f3f, ans = 0;
	for (int i = 2; i < m; i++) {
		int g = init - cnt(s[i - 1], s[i]) - cnt(s[i], s[i + 1]) + cnt(s[i - 1], s[i + 1]);
		if (g < minn) {
			minn = g;
			ans = 1;
		}
		else if (g == minn) ans++;
	}
	if (init < minn && flag) minn = init, ans = 1;
	else if (init == minn && flag) minn = init, ans++;
	cout << minn << ' ' << ans << '\n';
}

signed main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	
	int T;
	cin >> T;
	while (T--) solve();
	
	return 0;
}

标签:lceil,CF1858B,商店,int,text,init,Walkway,饼干,图解
From: https://www.cnblogs.com/Yuan-Jiawei/p/17633770.html

相关文章

  • PPT| 《图解CIO工作指南(第4版)》-读书笔记P143
    PPT共143页,由于篇幅有限,以下为部分资料.......
  • 图解 history api 和 React Router 实现原理
    Router是开发React应用的必备功能,那ReactRouter是怎么实现的呢?今天我们就来读一下ReactRouter的源码吧!首先,我们来学一下HistoryAPI,这是基础。什么是history呢?就是这个东西:我打开了一个新的标签页、然后访问baidu.com、sougou.com、taobao.com。长按后退按钮,就会列出......
  • LeetCode 刷题难?动画图解才是正确姿势!
    BAT等国内的一线名企,在招聘工程师的过程中,对算法和数据结构都会重点考察。但算法易学难精,我的很多粉丝技术能力不错,但面试时总败在算法这一关,拿不到好Offer。但说实话,数据结构和算法花点时间,用对方法,很容易解决。面试官为什么爱问数据结构与算法,答案很简单:算法能力能够准确辨别一......
  • 《图解密码技术》读后总结
    十分不耐烦,乃为人大病。内容1、密码学家工具箱:对称密码、公钥密码、单向散列函数、消息认证码、数字签名(证书)、伪随机数,这六类密码技术统称为密码学家工具箱。2、编码、位运算与加解密编码:将现实中的东西映射为比特序列的操作称为编码,编码通常是针对文字及图形符号。例如,......
  • 二叉树后序遍历非递归遍历实现图解
    二叉树的后序遍历输入:{1,#,2,3}返回值:[3,2,1]输入:{1}返回值:[1]代码实现publicint[]postorderTraversal(TreeNoderoot){TreeNodecur=root;List<Integer>list=newArrayList<>();Deque<TreeNode>stack=newArrayDeq......
  • SQLserver ssis包部署图解步骤
    SSDT开发环境搭建(因SQL版本为2014):1、下载VS2019社区版进行选项安装2、安装完成后在扩展中下载或直接在microsoft的官网中下载SSDT3、在VS2019创建中搜索SSIS 当开发完成后进行部署1、在部署前行改一下数据库的版本2、右键点击解决方案中的包进行重新生成;3、右键点击......
  • 反转链表系列图解
    1.反转链表给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。图解代码实现publicListNodeReverseList(ListNodehead){ListNodecur=head;ListNodepre=null;ListNodenext=null;......
  • 管道液位传感器怎么接线图解法
    管道光电液位传感器是利用红外光学组件,通过设计形成感应线路,判断光线在水与空气中的折光率不同,从而做出对液体状态的判断。光电管道传感器有效的解决了传统浮子传感器卡死失效的问题,同时也解决了电容式的感度衰减导致的失效问题,广泛应用于管道清水的检测,例如扫地机器人、洗碗机、饮......
  • 【设计原则】图解何为依赖倒置
    依赖倒置原则(DependenceInversionPrinciple,DIP)是指设计代码结构时,高层模块不应该依赖低层模块,二者都应该依赖其抽象。要理解何为倒置,那就先得明确什么是“正向”,可以看到下图代码是自上而下地调用,即高层模块依赖底层模块,这就是正向依赖。:而依赖倒置则是使用抽象接口来降低耦......
  • 环球骑行骑行路线图解 All In One
    环球骑行骑行路线图解AllInOneroundtheworldcycling环球旅行周游世界demos朱志文环球骑行骑行路线图解粉丝数25.1万获赞数162.4万播放数3181万阅读数9697https://space.bilibili.com/479592209朱志文环球骑行抖音号:qigeqiu201299.9万获赞19.8万粉丝h......