题解 | #丢手绢#

丢手绢

https://ac.nowcoder.com/acm/problem/207040

链接:https://ac.nowcoder.com/acm/problem/207040
来源:牛客网

题目描述

“丢~丢~丢手绢,轻轻地放在小朋友的后面,大家不要告诉她,快点快点抓住她,快点快点抓住她。”
牛客幼儿园的小朋友们围成了一个圆圈准备玩丢手绢的游戏,但是小朋友们太小了,不能围成一个均匀的圆圈,即每个小朋友的间隔可能会不一致。为了大家能够愉快的玩耍,我们需要知道离得最远的两个小朋友离得有多远(如果太远的话牛老师就要来帮忙调整队形啦!)。
因为是玩丢手绢,所以小朋友只能沿着圆圈外围跑,所以我们定义两个小朋友的距离为沿着圆圈顺时针走或者逆时针走的最近距离。


本题使用双指针的做法去求解(尺取法)。创建一个i和一个j,i是进的那一个,j是远的那一个。在i和j之间的距离大于或等于这个圆的周长的一半的时候长度达到最大。当进入到下一个i的时候这个时候的j要么是最大的要么还需要向前进一位。所以比起双重循环遍历节省了许多时间。
#include <iostream>
#include <cstdio>
#include <limits.h>
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;


int main() {
    IOS;
    int n, sum = 0;
    cin>>n;
    int a[n];
    for (int i=0;i<n;i++) {
        cin>>a[i];
        sum += a[i];
    }
    int len = 0, res = INT_MIN;
    int j = 0, cnt = 0;
    for (int i=0;i<n;i++) {
        while (cnt<sum/2) {
            cnt+=a[j%(n)];
            j++;
        }
        res = max(res, min(cnt, sum-cnt));
        cnt-=a[i];
    }
    cout<<res;
    return 0;
}


全部评论
请问倒数第九行为什么要取模啊?
点赞 回复 分享
发布于 2023-12-21 15:18 山东

相关推荐

虚闻松声:简历看起来很清爽。几点建议。 1. 总结提炼项目工作内容。如第一个项目第一点,研发用户信息管理、购票功能:(然后具体展开)。还可以继续总结,如基础功能开发、算法优化座位分配、并发性能提升等等 2. 优化技术栈描述。全文多次出现Spring Boot,我感觉一次就够了。可以不写或者写整个体技术架构? 3. 增加业务指标描述。最好有一些业务效果的指标。或者优化的效果指标等等。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务