2021年YACS1月月赛丙组T1《分割队伍》 题解

反思

这道题考场上因为USACO一道很相似的题,就突然认为这道题是动态规划,后来突然发现这道题用一个简单的循环就能解决。

思路

输入\(n\)\(a_i\),求所有\(a_i\)的和;循环遍历\(a\)数组,计算目前遍历到的所有\(a_i\)的和,再计算总和减去目前遍历的和(模拟分割,以得出两个队列分别的等待时间),求出两个队列等待时间的差的绝对值,使用打擂台求最小值,最后输出最小值即可

代码

/*
ID: zhangbe5
TASK: test
LANG: C++
*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
ll n,a[maxn];
ll sum,t,t1,ans=INT_MAX;
int main(){
	scanf("%lld",&n);
	for(ll i=1;i<=n;i++){
		scanf("%lld",&a[i]);
		sum+=a[i];//求和 
	}
	for(int i=1;i<=n;i++){
		t+=a[i];//通过循环加和,实现分割 
		t1=sum-t;
		ans=min(abs(t-t1),ans);//求最小差值 
	}
	printf("%lld",ans);//输出 
	return 0;
}
posted @ 2021-02-17 17:10  小罐猹  阅读(543)  评论(0编辑  收藏  举报