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;
 } 
相关推荐
神仙别闹几秒前
基于QT(C++)实现Windows 自启动项查看和分析
c++·windows·qt
微露清风9 分钟前
模拟算法学习记录
学习·算法
mifengxing21 分钟前
计算机组成原理概述
笔记·考研·计算机组成原理·复习笔记
问商十三载44 分钟前
2026法律行业AI引擎生成式优化怎么优化?三层专业加固提排名,零成本提33%引用率附适配表
java·前端·人工智能·算法
野生风长44 分钟前
c++类和对象(this指针,重载operator,习题总结)
java·开发语言·c++
最后的最后、7961 小时前
SQLi-Labs 六关 SQL 注入过关笔记
数据库·笔记·sql
雪的季节1 小时前
Python「假多态」与 C++「真多态」的核心区别
开发语言·c++
zander2581 小时前
138. 随机链表的复制
数据结构·算法·链表
筱谙1 小时前
BES BLE CTKD 完整学习笔记
笔记·学习