25| 丢手绢

代码实现

cpp 复制代码
typedef long long ll;
const int N = 2e5 + 10; // 因为要拼接数组,所以长度翻倍
ll a[N], tmp, ret;
int main()
{
    int n; cin >> n;
    ll circ = 0;
    for (int i = 1; i <= n; i++) 
    {
        cin >> a[i];
        circ += a[i];
        a[i + n] = a[i]; // 拼接数组,处理环形
    }
    int l = 1;
    tmp = 0, ret = 0;
    for (int r = 1; r <= 2 * n; r++) // 遍历到2n
    {
        tmp += a[r];
        // 当当前和超过半周长时,从左边移出元素
        while (tmp > circ / 2)
        {
            tmp -= a[l];
            l++;
        }
        // 更新最大的最近距离
        ret = max(ret, tmp);
        // 防止窗口长度超过n(即绕回一圈以上)
        if (r - l + 1 > n)
        {
            tmp -= a[l];
            l++;
        }
    }
    cout << ret << endl;
}
cpp 复制代码
typedef long long ll;
const int N = 1e5 + 10;
ll a[N], tmp, ret;
int main()
{
	int n; cin >> n;
	ll circ = 0;
	for (int i = 1; i <= n; i++) 
	{
		cin >> a[i];
		circ += a[i];
	}
	int l = 1, r = 1;
	while (r <= n)
	{
		// 入窗口
		tmp += a[r];
		// 判断
		while (tmp * 2 > circ)
		{
			ret = max(ret, circ - tmp);
			// 出窗口
			tmp -= a[l];
			l++; 
		 } 
		 
		// 更新结果
		ret = max(ret, tmp); 
		r++;
	}
	cout << ret << endl;
 } 
相关推荐
郝学胜-神的一滴几秒前
[简化版 GAMES 101] 计算机图形学 03:线性代数下
开发语言·c++·线性代数·图形渲染
海海不掉头发3 分钟前
【神经网络基础】-学习探索篇章-基础篇
人工智能·神经网络·学习
for_ever_love__3 分钟前
Objective-C学习:UI的初步了解
学习·ui·objective-c
Ln5x9qZC28 分钟前
尾递归与Continuation
算法
一路向北he8 分钟前
esp32库依赖
c语言·c++·算法
老四啊laosi8 分钟前
[双指针] 6. 查找总价为目标值的两个商品
算法·力扣·总价为目标值得两商品
weixin_4434785112 分钟前
Flutter第三方常用组件包学习之状态管理
javascript·学习·flutter
Engineer邓祥浩17 分钟前
JVM学习笔记(5) 第二部分 自动内存管理 第4章 虚拟机性能监控、故障处理工具
jvm·笔记·学习
Howrun77718 分钟前
C++ 项目测试全指南:从 0 基础到落地实操
开发语言·c++·log4j
YYYing.20 分钟前
【Linux/C++网络篇(二) 】TCP并发服务器演进史:从多进程到Epoll的进化指南
linux·服务器·网络·c++·tcp/ip