【vijos1900】 学姐吃寿司

本文探讨了一种针对01环序列的优化问题,通过将序列复制并转换为线性序列,采用枚举断点的方法,结合单调性原理,实现了序列中所有0元素聚集一侧的最小操作步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://vijos.org/p/1900 (题目链接)

题意

  给出一个01环,问最少经过多少次相邻互换使得所有的0聚在一坨,所有的1聚在一坨。

Solution

  源自:LCF Solution

  一般环上的问题都要把序列复制一遍,然后转成了序列上的问题。这道也不例外。

  经过观察后我们“显然”可以得到一个结论:对于最优解,定有断点使得所有的交换都不经过这个点。因为如果所有相邻的位置都交换了一次,相邻的位置都交换了一次那么这些操作并没有改变这个环的形态,也就是没有任何作用完全可以直接去掉。(然而LCF讲题翻车,这个证明显然是错误的,在不同的时间交换两个相邻的位置最终态并不会一样→_→。然而我也会证,只是感觉很正确)

  于是,我们就可以枚举断点,然后就转变为了一个序列了。我们的目的就变成了使0全部靠边。然后可以预处理出每个0移动到左边界需要多少步,右边界需要多少步。发现对于一个序列,肯定是存在一条分界线使得左边一部分0往左靠,右边一部分0往右靠,当断点顺时针移动的时候,分界点显然不会逆时针移动。于是这玩意儿是有单调性的,弄一个单调指针扫一扫就可以了。

细节

  数组开大两倍

代码

// vijos1900
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
#define inf 1e18
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std;

const int maxn=2000010;
int a[maxn],sum[maxn];
char ch[maxn];

int main() {
	int T;scanf("%d",&T);
	for (int cas=1;cas<=T;cas++) {
		scanf("%s",ch+1);
		int n=strlen(ch+1);
		for (int i=1;i<=n;i++) {
			if (ch[i]=='B') a[i]=0;
			else a[i]=1;
		}
		for (int i=n+1;i<=n*2;i++) a[i]=a[i-n];
		for (int i=1;i<=n*2;i++) sum[i]=a[i]+sum[i-1];
		LL p=1,ans=inf,L=0,R=0,lnum=0,rnum=0;
		for (int i=1;i<=n;i++) if (a[i]==0) R+=sum[n]-sum[i-1],rnum++;
		for (int s=1;s<=n;s++) {
			int t=s+n-1;
			if (s!=1) {
				if (a[s-1]==0) lnum--;
				if (a[s-1]==1) L-=lnum;
				if (a[t]==0) rnum++;
				if (a[t]==1) R+=rnum;
			}
			for (p;p<=t+1;p++) if (a[p]==0) {
					if (sum[p-1]-sum[s-1]>sum[t]-sum[p]) break;
					L+=sum[p-1]-sum[s-1];
					R-=sum[t]-sum[p];
					lnum++;rnum--;
				}
			ans=min(ans,L+R);
		}
		printf("Case #%d: %lld\n",cas,ans);
	}
	return 0;
}

  

转载于:https://www.cnblogs.com/MashiroSky/p/6028508.html

内容概要:本文深入解析了扣子COZE AI编程及其详细应用代码案例,旨在帮助读者理解新一代低门槛智能体开发范式。文章从五个维度展开:关键概念、核心技巧、典型应用场景、详细代码案例分析以及未来发展趋势。首先介绍了扣子COZE的核心概念,如Bot、Workflow、Plugin、Memory和Knowledge。接着分享了意图识别、函数调用链、动态Prompt、渐进式发布及监控可观测等核心技巧。然后列举了企业内部智能客服、电商导购助手、教育领域AI助教和金融行业合规质检等应用场景。最后,通过构建“会议纪要智能助手”的详细代码案例,展示了从需求描述、技术方案、Workflow节点拆解到调试与上线的全过程,并展望了多智能体协作、本地私有部署、Agent2Agent协议、边缘计算插件和实时RAG等未来发展方向。; 适合人群:对AI编程感兴趣的开发者,尤其是希望快速落地AI产品的技术人员。; 使用场景及目标:①学习如何使用扣子COZE构建生产级智能体;②掌握智能体实例、自动化流程、扩展能力和知识库的使用方法;③通过实际案例理解如何实现会议纪要智能助手的功能,包括触发器设置、下载节点、LLM节点Prompt设计、Code节点处理和邮件节点配置。; 阅读建议:本文不仅提供了理论知识,还包含了详细的代码案例,建议读者结合实际业务需求进行实践,逐步掌握扣子COZE的各项功能,并关注其未来的发展趋势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值