列表

详情


NC207040. 丢手绢

描述

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

输入描述

第一行一个整数N,表示有N个小朋友玩丢手绢的游戏。
接下来的第2到第n行,第i行有一个整数,表示第i-1个小朋友顺时针到第i个小朋友的距离。
最后一行是第N个小朋友顺时针到第一个小朋友的距离。

输出描述

输出一个整数,为离得最远的两个小朋友的距离。

示例1

输入:

3
1
2
3

输出:

3

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++ 11.0.1) 解法, 执行用时: 32ms, 内存消耗: 700K, 提交时间: 2022-10-18 16:08:06

#include<iostream>
using namespace std;
int a[200000];
int main(){
	int sum=0,n,i,j,res=0,cnt;
	cin>>n;
	for(i=0;i<n;i++){
		cin>>a[i];
		sum+=a[i];
	}j=0;cnt=0;
	for(i=0;i<n;i++){
		while(cnt<sum/2){
			cnt+=a[j++%n];
		}
		res=max(res,min(sum-cnt,cnt));
		cnt-=a[i];
	}cout<<res;
}

Python3 解法, 执行用时: 450ms, 内存消耗: 9052K, 提交时间: 2023-07-26 12:27:00

n=int(input())
a=[]
for i in range(n):
    a.append(int(input()))
s=sum(a)
j=0;ans=0;cnt=0
for i in range(n):
    cnt+=a[i]
    while j<=i and s-cnt<cnt:
        ans=max(ans,s-cnt)
        cnt-=a[j]
        j+=1
    ans=max(ans,cnt)
print(ans)

上一题