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

AcWing 5539. 牛奶交换 整体思维+破环成链思想

5539. 牛奶交换 - AcWing题库

y老师的板书

如果是往右循环,且有左循环与之相对头,如图所示,则可以发现,右循环的最后一个和左循环的第一个不会损失,因为分别有其右边和或左边的为它补给,而两端(用红线圈出来的部分)的因为没有补给而损失。所以只需将每一个方向相同R或L的划分为一个整体,剔除不会损失的那一个,将整体中其他的与m取小即可算出每一个整体还剩多少,最后将每一个整体求和即可

 


const int N = 4e5 + 10;//两倍长度


LL n,m;
char s[N];
LL a[N];

void solve()
{
	cin >> n >> m;
	
	LL ans = 0;
	
	for (int i = 1;i <= n;i ++) cin >> s[i];
	for (int i = 1;i <= n;i ++) cin >> a[i],ans += a[i];
	
	for (int i = 1;i <= n;i ++)
	{
		s[i + n] = s[i];
		a[i + n] = a[i];
	}
	
	int k = 1;
	while(k <= n && s[k] == s[k + 1]) k ++;
	
	//找可以分开的点
	if (k < n)//有切口时,计算损失;没有切口时不会损失而是会一直循环
	{
		for (int i = k + 1;i + n - 1<= 2 * n;i ++)
		{
			int j = i;
			LL sum = 0;
			while(j <= k + n && s[j] == s[i]) sum += a[j],j ++;
			if (s[j - 1] == 'R') sum -= a[j - 1];
			else sum -= a[i];
			
			ans -= min(m,sum);
			
			i = j - 1;//i++之后i就指向第一个不同的位置了
		}
	}
	
	cout << ans << endl;
}	




相关文章:

  • IO多路复用(epoll)/数据库(sqlite)
  • cocos creator 混合模式编辑器与运行不一致的问题
  • TypeError: JSON.stringify cannot serialize cyclic structures
  • anolis8.9-k8s1.32-node-二进制部署
  • FreeRTOS第15篇:FreeRTOS链表实现细节03_List_t与ListItem_t的奥秘
  • Python程序的「加密」:Cython编译
  • 深度体验阿里云操作系统控制台
  • Process-based Self-Rewarding Language Models 论文简介
  • 项目管理工具 Maven
  • c语言程序设计--数组里面考察最多的一个知识点-考研冲刺复试面试问答题。
  • 微信小程序引入vant-weapp组件教程
  • 利用后缀表达式构造表达式二叉树的方法
  • [java][RsaUtils]RSA工具类
  • HAL库,配置adc基本流程
  • USB流量分析总结(实战[NISACTF 2022] 破损的flag)
  • 把握好自己的节奏, 别让世界成为你的发条匠
  • Linux 进程间通信
  • 【QT】-易错点笔记-2025-2-7
  • 【组件安装FAQ】Connector 24.10.06-1: [cnc0306002] already exists.
  • 实现自定义圆角imageView, 抗锯齿
  • 大连无网站的企业有哪些/站长之家域名查询排行
  • 太原住房和城乡建设部网站/郑州网站seo优化公司
  • 苏州网站建设 公司/谷歌google官网下载
  • html5做图书馆网站/互联网营销专业
  • 鲜花品牌网站建设/竞价托管公司排名
  • 浙江省住房城乡建设厅官方网站/桂林网页